2017-02-18 59 views
0

可以说我有两种资源,都返回JSON。对于request1,我想使用jackson mixin来准备返回的JSOn。对于request2我不想使用任何mixin。的Spring MVC /杰克逊:复位objectMapper completition后

问题:如何request1复位后混入?对象映射器是一个spring bean/singleton。

代码:

@ResponseBody 
public Something getSomething1(..) { 
    .. 
    objectMapper.addMixIn(Something.class, MyMixin.class); 
    return obj; 
} 

@ResponseBody 
public Something getSomething2(..) { 
    .. 
    return obj; 
} 

我当然可以在开始取消所有在getSomething2()和所有其他方法的混入,但我宁愿要getSomething1的completition之后做到这一点。所以修改objectMapper的方法应该取消它的改变。

编辑: 作为JBNizet提到的,这不是线程安全的。有谁知道更好的方式如何使用杰克逊mixin只有一种方法?

+0

我没有任何好的解决方案来提供,但是你想要的解决方案是不正确的:ObjectMapper是一个单身,被所有的控制器使用,并且请求由多个控制器同时处理,或者多个方法同一控制器。 –

+0

@JBNizet我同意。但是,你是否知道如何仅以一种方法使用这些mixin? – NoobieNoob

+0

除了创建和配置自己的ObjectMapper实例,并使用此映射器显式序列化响应正文外,no。另一种方法是使用JSON视图,如下所述:https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring。或者简单地将你的东西转换为具有正确结构的对象。 –

回答

0

可以使用ObjectMapper.copy()创建一个新的ObjectMapper配置相同与原始。然后将您的自定义MixIns添加到新的ObjectMapper实例中。