我希望将对象自动序列化为JSON以及返回原始JSON字符串的能力。我使用的是Gson而不是Jackson,因为Gson已经在我的应用程序中使用了一段时间,我在我的应用程序中都有现有的调整,转换器和注释。
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class="com.test.GSONHttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
我可以自动序列化pojo:
@RequestMapping(value="foo/{name}", method = RequestMethod.GET)
public @ResponseBody Shop getShopInJSON(@PathVariable String name) {
return new Shop();
}
我希望这也能奏效:
@RequestMapping(value="rawJsonTest/{name}", method = RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String rawJsonTest(@PathVariable String name) {
return "{\"test\":5}";
}
现在的结果是一个转义值:
"{\"test\":5}"
而不是:
{"test":5}
答案 0 :(得分:4)
感谢正确答案,@ JB Nizet
订单事宜:
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class = "org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json; charset=UTF-8" />
</bean>
<bean class="com.test.GSONHttpMessageConverter" />
</mvc:message-converters>
答案 1 :(得分:3)
问题是您的自定义转换器优先于默认转换器。因此调用它,将String视为必须转换为JSON的原始String,从而转义双引号。
我不确定XML是否以及如何在默认值之后(而不是之前)注册转换器,但您可以将register-defaults设置为false并提供您想要的所有转换器的明确列表应用。如果org.springframework.http.converter.StringHttpMessageConverter
在您的自定义之前注册,它将首先被调用,并将按原样发送返回的字符串。