在以下情况下,我有多个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。代码经过简化以提高可读性。
答案 0 :(得分:0)
事实证明,如果混入使用的自定义序列化程序之一有可能在重写的serialize方法中引发异常,则该异常在调用公开的Rest终结点时会导致讨厌的HTTP 500。奇怪的是,该消息不是那么直观和可解释的。