我的Spring应用程序中有一个JacksonMessageConverter用于返回JSON响应。 但是在返回JSON之前,我想对Ajax Security - Preventing JSON hijacking中给出的JSON进行污染。使用消息转换器时是否可以这样做?
更新
我正在寻找类似于此spring prefixjson with responsebody的解决方案,但我已经正确设置了配置。 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仍然没有“&amp;&amp; {}”前缀。
注意:我想为JSON使用不同的前缀,如Ajax Security - Preventing JSON hijacking中所述 但即使杰克逊提供的默认支持似乎也不起作用。有什么想法吗?
答案 0 :(得分:1)
更简单的方法是扩展MappingJacksonHttpMessageConverter并覆盖writeInternal方法来执行自定义前缀等操作
答案 1 :(得分:1)
尝试调试MappingJacksonHttpMessageConverter,看看prefixJson
是否等于 true 。
如果没有,那么你的豆子不会被注射。
如果是,请查看MappingJacksonHttpMessageConverter类的writeInternal()
方法。 IT显然可以满足您的需求:
try {
if (this.prefixJson) {
jsonGenerator.writeRaw("{} && ");
}
this.objectMapper.writeValue(jsonGenerator, o);
}
如果您想添加自定义前缀,则需要覆盖writeInternal()
并在那里执行。