Spring Jackson条件根包装 [英] Spring Jackson conditional root wrapping

查看:147
本文介绍了Spring Jackson条件根包装的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个域对象,对于一个请求,我只需要用row包装root(对于DataTables Editor)。

I have a domain object that for one request only I need to wrap the root with "row" (for DataTables Editor).

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

The problem is that I only want the root wrapped in the response body of one controller method.

有关如何仅在一个控制器方法中有条件地启用根包装的任何建议吗?我想在一个方法中启用它,然后在*控制器周围写一个切入点以在后续请求中禁用它,但是有一个更好的方法......

Any suggestions how to conditionally enable root wrapping in one controller method only? I thought about enabling it in the one method and then writing a pointcut around *controller to disable it on subsequent requests, but there's gotta be a better way...

我的Spring配置是:

My Spring configuration is:

@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(row)

This works except for the case where I want to wrap my POJO using @JsonRootName, e.g.: @JsonRootName("row")

推荐答案

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

I solved the problem by creating a new object mapper in the controller and returning the JSON as a String, e.g.:

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

这也意味着配置一个String消息转换器:

This also meant configuring a String message converter:

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

这篇关于Spring Jackson条件根包装的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆