Spring MVC 2个不同配置的RestController

3bygqnnd  于 2022-11-14  发布在  Spring
关注(0)|答案(1)|浏览(241)

是否可以在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");
    }
}

}

GitHub:
https://github.com/fdlessard/SpringBootEndpoints

k2arahey

k2arahey1#

MappingJackson2HttpMessageConverter对于所有使用@RestController标注的控制器都是通用的,不过也有一些方法可以解决这个问题。一个常见的解决方案是将控制器返回的结果 Package 到一个标记类中,并使用一个自定义的MessageConverter(Example implementation used by Spring Hateoas)和/或使用一个自定义的响应媒体类型。
TypeConstrainedMappingJackson2HttpMessageConverter的示例用法,其中ResourceSupport是标记类。

MappingJackson2HttpMessageConverter halConverter = 
    new TypeConstrainedMappingJackson2HttpMessageConverter(ResourceSupport.class);
halConverter.setSupportedMediaTypes(Arrays.asList(HAL_JSON));
halConverter.setObjectMapper(halObjectMapper);

您可以在此处找到基于您的代码的工作示例:https://github.com/AndreasKl/SpringBootEndpoints
可以对Price传输对象使用自定义序列化程序,而不是使用PropertyNamingStrategy

相关问题