是否可以在Springboot中拥有两个不同的**@ RestController**,?它们使用不同的*MappingJackson 2 HttpMessageConverter?......或者MappingJackson 2 HttpMessageConverter对于Springboot应用程序中的所有@RestController是通用的吗?
基本上,目标是使用不同的MappingJackson 2 HttpMessageConverter,其中包含使用Jackson MixIn的不同Jackson ObjectMapper,以便(在Json中)在第二个控制器中将id重命名为priceId。
调用第一个控制器将执行以下操作:
http://localhost:8080/controller1/price
{ id:“id”,说明:【说明】}
调用第二个控制器将执行以下操作:
http://localhost:8080/controller2/price
{ priceId:“id”,说明:【说明】}
此致
@SpringBootApplication
public class EndpointsApplication {
public static void main(String[] args) {
SpringApplication.run(EndpointsApplication.class, args);
}
@Data // Lombok
@AllArgsConstructor
class Price {
String id;
String description;
}
@RestController
@RequestMapping(value = "/controller1")
class PriceController1 {
@GetMapping(value = "/price")
public Price getPrice() {
return new Price("id", "Description");
}
}
@RestController
@RequestMapping(value = "/controller2")
class PriceController2 {
@GetMapping(value = "/price")
public Price getPrice() {
return new Price("id", "Description");
}
}
}
1条答案
按热度按时间k2arahey1#
MappingJackson2HttpMessageConverter
对于所有使用@RestController
标注的控制器都是通用的,不过也有一些方法可以解决这个问题。一个常见的解决方案是将控制器返回的结果 Package 到一个标记类中,并使用一个自定义的MessageConverter
(Example implementation used by Spring Hateoas)和/或使用一个自定义的响应媒体类型。TypeConstrainedMappingJackson2HttpMessageConverter
的示例用法,其中ResourceSupport
是标记类。您可以在此处找到基于您的代码的工作示例:https://github.com/AndreasKl/SpringBootEndpoints
可以对
Price
传输对象使用自定义序列化程序,而不是使用PropertyNamingStrategy
。