我希望能够方便地将对象自动序列化为 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}
最佳答案
问题在于您的自定义转换器优先于默认转换器。它因此被称为,将 String 视为必须转换为 JSON 的原始 String,从而转义双引号。
我不确定是否以及如何使用 XML 在默认转换器之后(而不是之前)注册转换器,但您可以将 register-defaults 设置为 false 并提供您想要的所有转换器的显式列表申请。如果 org.springframework.http.converter.StringHttpMessageConverter
在您的自定义之前注册,它将首先被调用并按原样发送返回的字符串。
关于json - spring-mvc 返回原始 json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019819/