【问题标题】:Jackson object mappers mixin breaks springboot list response from controllerJackson objectmapper mixin 中断了来自控制器的 Spring Boot 列表响应
【发布时间】:2019-11-09 22:40:57
【问题描述】:

我有以下情况,我有多个 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。为了更好的可读性,代码被简化了。

【问题讨论】:

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


    【解决方案1】:

    事实证明,如果 mixin 使用的自定义序列化程序之一在被覆盖的序列化方法中抛出异常,那么在调用暴露的 Rest 端点时,该异常会导致讨厌的 HTTP 500。奇怪的是,该信息不是那么明显和直接可解释的。

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 2017-12-19
      • 2015-01-14
      • 1970-01-01
      相关资源
      最近更新 更多