我的Spring应用程序中有一个JacksonMessageConverter,用于返回JSON响应。但是在返回JSON之前,我想按照Ajax安全-防止JSON劫持中给出的那样污染JSON。使用消息转换器时是否可以这样做?
更新
我正在寻找一个类似于这个带有responsebody的spring-prefixjson的解决方案,但我已经正确设置了配置。PFB-
<bean id="jacksonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="prefixJson" value="true" />
<property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" />
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter"/>
</list>
</property>
</bean>
但是返回的JSON仍然没有前缀"&&{}"。
注意:我想为JSON使用不同的前缀,如Ajax安全-防止JSON劫持中所述但即使是杰克逊提供的默认支持似乎也不起作用。有什么想法吗?
试着调试MappingJacksonHttpMessageConverter,看看prefixJson
是否等于true。如果没有,那么你的豆子没有正确注射。如果是,请查看MappingJacksonHttpMessageConverter类的writeInternal()
方法。它清楚地做你需要的:
try {
if (this.prefixJson) {
jsonGenerator.writeRaw("{} && ");
}
this.objectMapper.writeValue(jsonGenerator, o);
}
如果要添加自定义前缀,则需要覆盖writeInternal()
并在那里执行。
更简单的方法是扩展MappingJacksonHttpMessageConverter并覆盖writeInternal方法来执行自定义前缀等操作