我正在做一个web项目,它使用一个静态objectmapper,它是通过xml文件配置的,应该在整个项目中生效。但是,我必须实现一个api来发送响应,不管设置如何,都不会忽略null属性。我的老板告诉我,他不想再创建一个objectmapper,创建我自己的json编写器被认为是多余的,所以这也是被禁止的。所以我被困在这里。我试过了。
Map<String, Object>resultMap = getResult();
try {
mapper.setSerializationInclusion(Include.ALWAYS);
response = mapper.writeValueAsString(resultMap);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
} finally {
if (ServiceConfig.isWriteNull()) {
mapper.setSerializationInclusion(Include.ALWAYS);
} else {
mapper.setSerializationInclusion(Include.NON_NULL);
}
}
临时切换设置,它的工作。但是考虑到Map器是异步使用的,更改全局配置绝对是个坏主意。我还想过在配置切换之前锁定Map器,但是由于Map器是静态的,这可能是另一个坏主意。我想有一些像注解或参数魔术般影响单个执行整洁的方式。我想知道这是否可能?
2条答案
按热度按时间3wabscal1#
2j4z5cfb2#
您当前拥有的是危险的,因为您正在临时更改全局Map器的配置。这也会影响同时使用同一Map器示例执行序列化的其他线程。
然而,还有另一种方法可以达到你所需要的。这个
ObjectMapper
示例有几个方法来创建ObjectWriter
-基于Map器的示例。作为
@Stepan Stahlmann
在你的评论中说,你也可以创建一个临时的新ObjectMapper
基于全局示例的示例,使用ObjectMapper#copy()
方法。想法是一样的:使用全局ObjectMapper
作为根目录进行配置,并进行一些调整,以便生成符合api约定的json。另一种方法。。。
我能想到的还有另外一种方法,而且我确信还有更多的方法。你可以把衣服包起来
resultMap
在存在某些注解的类中,这些注解应推翻Map器的默认行为: