Jackson objectmapper mixin 中断来自控制器的 spring boot 列表响应
Jackson object mappers mixin breaks springboot list response from controller
我遇到以下情况,我有多个 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 启动控制器 returns 一个字符串 json 如果没有 specified.The 代码被简化以提高可读性。
事实证明,如果 mixin 使用的自定义序列化程序之一偶然在覆盖的序列化方法中抛出异常,那么该异常会在调用公开的 Rest 端点时导致讨厌的 HTTP 500。奇怪的是,该消息不是那么可见和直接可解释。
我遇到以下情况,我有多个 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 启动控制器 returns 一个字符串 json 如果没有 specified.The 代码被简化以提高可读性。
事实证明,如果 mixin 使用的自定义序列化程序之一偶然在覆盖的序列化方法中抛出异常,那么该异常会在调用公开的 Rest 端点时导致讨厌的 HTTP 500。奇怪的是,该消息不是那么可见和直接可解释。