Java 2个不同配置的控制器

Java 2个不同配置的控制器,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,是否有可能在Springboot中有两个不同的@restcontroller使用不同的映射Jackson2HttpMessageConverter。。。或者MappingJackson2HttpMessageConverter对于spring引导应用程序中的所有@RestController都是通用的 基本上,目标是使用不同的MappingJackson2HttpMessageConverter,其中包含不同的Jackson对象映射器,该映射器使用Jackson MixIn将第二个控制器中的id

是否有可能在Springboot中有两个不同的@restcontroller使用不同的映射Jackson2HttpMessageConverter。。。或者MappingJackson2HttpMessageConverter对于spring引导应用程序中的所有@RestController都是通用的

基本上,目标是使用不同的MappingJackson2HttpMessageConverter,其中包含不同的Jackson对象映射器,该映射器使用Jackson MixIn将第二个控制器中的id重命名为priceId(在Json中)

对第一个控制器的调用将执行以下操作:

{id:“id”,description:“description”}

调用第二个控制器将执行以下操作:

{priceId:“id”,description:“description”}

问候

@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");
    }
}

}
GitHub:


映射Jackson2HttpMessageConverter对于使用
@RestController
注释的所有控制器来说都是通用的,但是有一些方法可以解决这个问题。一种常见的解决方案是将控制器返回的结果包装到标记类中,并使用自定义
MessageConverter
和/或使用自定义响应媒体类型

TypeConstrainedMappingJackson2HttpMessageConverter的示例用法,其中
ResourceSupport
是标记类

MappingJackson2HttpMessageConverter halConverter = 
    new TypeConstrainedMappingJackson2HttpMessageConverter(ResourceSupport.class);
halConverter.setSupportedMediaTypes(Arrays.asList(HAL_JSON));
halConverter.setObjectMapper(halObjectMapper);
您可以在此处找到基于代码的工作示例:

可以为您的
Price
传输对象使用自定义序列化程序,而不是使用
PropertyNamingStrategy

请看这篇文章。