【问题标题】:Spring Jackson conditional root wrappingSpring Jackson 条件根包装
【发布时间】:2015-07-26 14:07:10
【问题描述】:

我有一个域对象,仅对于一个请求,我需要用“行”包装根(对于 DataTables 编辑器)。

问题是我只希望根包裹在一个控制器方法的响应体中。

任何建议如何仅在一种控制器方法中有条件地启用根包装?我考虑过在一种方法中启用它,然后围绕 *controller 编写一个切入点以在后续请求中禁用它,但必须有更好的方法......

我的 Spring 配置是:

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(jackson2Converter());
}

@Bean
public MappingJackson2HttpMessageConverter jackson2Converter() {
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    converter.setObjectMapper(objectMapper());
    return converter;
}

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    return objectMapper;
}

除了我想使用 @JsonRootName 包装我的 POJO 的情况外,这有效,例如: @JsonRootName("行")

【问题讨论】:

    标签: java spring spring-mvc jackson


    【解决方案1】:

    我通过在控制器中创建一个新的对象映射器并将 JSON 作为字符串返回来解决了这个问题,例如:

    ObjectMapper rootMapper = new ObjectMapper();
    rootMapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
    return rootMapper.writeValueAsString(myObject);
    

    这也意味着配置一个字符串消息转换器:

    @Bean
    public StringHttpMessageConverter stringMessageConverter() {
        StringHttpMessageConverter converter = new StringHttpMessageConverter();
        converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON));
        return converter;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 2016-05-07
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多