Jackson对象映射器mixin破坏了控制器的springboot列表响应

时间:2019-06-27 22:09:21

标签: spring-boot jackson objectmapper jackson-databind jackson-modules

在以下情况下,我有多个MappingJackson2HttpMessageConverter都使用一个共享的ObjectMapper进行了添加,并添加了一个mixin。

@Bean
public ObjectMapper objectMapper(){
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.addMixin(Item.class, ItemMixin.class);
    return objectMapper;
}
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
    MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(objectMapper());
    return mappingJackson2HttpMessageConverter;
}

该应用程序是SpringBoot(我知道springboot会自行执行消息转换器的默认实例化),但问题是,当我调用具有返回项列表的端点时,我会得到500,因为该行:

objectMapper.addMixin(Item.class, ItemMixin.class);

不知何故,我不明白为什么。

@GetMappring(.....)
public List<Item> getItems(){
    return Arrays.asList(new Item(1), new Item(2));
}

我知道默认情况下,如果未指定任何内容,spring boot控制器会返回一个字符串json。代码经过简化以提高可读性。

1 个答案:

答案 0 :(得分:0)

事实证明,如果混入使用的自定义序列化程序之一有可能在重写的serialize方法中引发异常,则该异常在调用公开的Rest终结点时会导致讨厌的HTTP 500。奇怪的是,该消息不是那么直观和可解释的。