spring-mvc返回原始json字符串

时间:2013-11-16 14:56:02

标签: json spring-mvc gson

我希望将对象自动序列化为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}

2 个答案:

答案 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在您的自定义之前注册,它将首先被调用,并将按原样发送返回的字符串。