spring boot 覆盖控制器方法
springboot override controller methods
我不得不问,因为 none 我找到的答案可以帮助我解决我的问题。
我有控制器
@RestController
@RequestMapping("/path")
DefaultController
我想覆盖它的方法,因为一个特定的客户有特定的逻辑,控制器
@RestController
@RequestMapping("/path")
CustomController
可以使用扩展原始请求的 RequestBody 具有完全相同的方法签名或覆盖方法。
- 我尝试为放置注释的控制器定义一个接口
- 我在 CustomController 上使用了@Primary 和@Profile 来强制Spring加载它而不是默认版本
解决方案不起作用,因为 Spring 检测到方法的双重映射,即著名的“歧义映射”。
有人知道我该如何解决这个问题吗?
我只想只在需要的地方插入控制器的自定义实现,只覆盖我需要的方法,而不改变请求路径。
自定义服务是不够的,因为有时我必须通过附加字段
传递请求体
我们正在使用 springboot 2.4.7,spring 5.3.8
提前致谢
如果内容类型不是您关心的问题,您可以尝试更改 consumer/producer
@RestController
@RequestMapping("/path", consumes = MediaType.TEXT_PLAIN_VALUE)
CustomController
不要为此使用 @Profile
,@Profile
适用于自定义测试或构建之类的事情。您只需要创建一个单独的控制器并相应地命名路径,确实没有充分的理由尝试覆盖控制器方法。 Spring 由于路径重复,甚至不允许您这样做。即使它在某种程度上是可能的,想象一下它会造成故障排除的噩梦,除了你之外的任何人怎么知道“哪个”控制器实际部署在生产系统中。
我终于能够解决我的问题了。
我这样做了,如果有人感兴趣
- 通过@Profile("what you want")
将特定配置文件分配给覆盖控制器
- 通过@RequestMapping 属性“headers”向控制器请求映射添加了自定义 header
- 仅针对 post 和 put 方法,我必须在原始和自定义控制器上再次为属性“headers”设置一个值
我不得不问,因为 none 我找到的答案可以帮助我解决我的问题。
我有控制器
@RestController
@RequestMapping("/path")
DefaultController
我想覆盖它的方法,因为一个特定的客户有特定的逻辑,控制器
@RestController
@RequestMapping("/path")
CustomController
可以使用扩展原始请求的 RequestBody 具有完全相同的方法签名或覆盖方法。
- 我尝试为放置注释的控制器定义一个接口
- 我在 CustomController 上使用了@Primary 和@Profile 来强制Spring加载它而不是默认版本
解决方案不起作用,因为 Spring 检测到方法的双重映射,即著名的“歧义映射”。
有人知道我该如何解决这个问题吗?
我只想只在需要的地方插入控制器的自定义实现,只覆盖我需要的方法,而不改变请求路径。 自定义服务是不够的,因为有时我必须通过附加字段
传递请求体我们正在使用 springboot 2.4.7,spring 5.3.8
提前致谢
如果内容类型不是您关心的问题,您可以尝试更改 consumer/producer
@RestController
@RequestMapping("/path", consumes = MediaType.TEXT_PLAIN_VALUE)
CustomController
不要为此使用 @Profile
,@Profile
适用于自定义测试或构建之类的事情。您只需要创建一个单独的控制器并相应地命名路径,确实没有充分的理由尝试覆盖控制器方法。 Spring 由于路径重复,甚至不允许您这样做。即使它在某种程度上是可能的,想象一下它会造成故障排除的噩梦,除了你之外的任何人怎么知道“哪个”控制器实际部署在生产系统中。
我终于能够解决我的问题了。 我这样做了,如果有人感兴趣
- 通过@Profile("what you want") 将特定配置文件分配给覆盖控制器
- 通过@RequestMapping 属性“headers”向控制器请求映射添加了自定义 header
- 仅针对 post 和 put 方法,我必须在原始和自定义控制器上再次为属性“headers”设置一个值