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。奇怪的是,该消息不是那么可见和直接可解释。