在spring mvc中,在perRequest的基础上在objectMapper上添加FiterProvider时,它是否是线程安全的?

时间:2012-10-31 20:37:24

标签: java spring jackson

我有以下添加自定义对象映射器的方法。

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.CMSMappingJacksonHttpMessageConverter">
            <property name="objectMapper" ref="jsonMapper"/>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

然后在控制器中我正在使用

@Autowired   private ObjectMapper jsonMapper;

我采用的一种行动方法

@RequestMapping(produces = "application/json", method = RequestMethod.GET)
public
@ResponseBody
Response get(){
    jsonMapper.setFilters(new SimpleFilterProvider().addFilter(dynamic_per_request));
    return service.get();
}

我只是担心它不会是线程安全的。这是真的吗?如果是,我怎样才能使其线程安全?

1 个答案:

答案 0 :(得分:0)

不,你不应该这样处理。您正在动态更改配置,但在第一个请求实际使用过滤器之前,很可能会发出另一个请求并将其更改为其他请求。

相反,您应该实现线程安全的FilterProvider,它可以动态地解析您的过滤器,使用类似ThreadLocal的内容来传递您需要传递的信息。