当前位置: 首页 > 知识库问答 >
问题:

spring-mvc返回原始json字符串

戚京
2023-03-14

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

共有1个答案

西门智
2023-03-14

问题是您的自定义转换器优先于默认转换器。它就是这样被调用的,它将字符串视为必须转换为JSON的原始字符串,因此省略了双引号。

我不确定XML是否以及如何能够在默认转换器之后(而不是之前)注册转换器,但是您可以将register-defaults设置为false并提供您想要应用的所有转换器的显式列表。如果org.springframework.http.converter.StringhtTPMessageConverter是在您的自定义字符串之前注册的,那么它将首先被调用,并按原样发送返回的字符串。

 类似资料:
  • 我有一个Spring MVC控制器,方法如下: 它位于一个开始如下所示的控制器内部: 我使用的是Spring WebMVC 4.1.3和Jackson 2.4.3。我尝试在RequestMapping中添加一个“produces”属性,表示它应该返回JSON。在本例中,发回的Content-Type属性是“application/json”,但仍然没有引用测试字符串。 我可以通过调用JSON库将J

  • 问题内容: 我想构建自己的JSON,并让服务返回一个字符串,这是代码 我得到的响应包含用于在c#中的字符串中创建\的\“。 以下是响应。 值已正确编码,但json本身未正确格式化。这些导致它破烂不堪。 我该如何返回一个字符串,而在’的前面没有\呢? 问题答案: 目前,您的网络方法与一起返回。它遵循字符串的JSON编码。对应于www.json.org,字符串中的所有双引号将使用反斜杠转义。因此,您目

  • 我将对象作为JSON字符串存储在数据库中。我想制作一个公开这些字符串的REST服务。然而,当我编写方法时,我返回的字符串中的引号被转义了。例如,我包含了一个返回字符串的方法,

  • 问题内容: 为了使进度报告过程更加可靠,并使它与请求/响应脱钩,我正在Windows Service中执行处理,并将预期的响应持久化到文件中。当客户端开始轮询更新时,其目的是控制器以JSON字符串形式返回文件的内容(无论它们是什么)。 该文件的内容已预序列化为JSON。这是为了确保在响应过程中没有任何阻碍。无需进行任何处理(只需将文件内容读入字符串并返回)即可获得响应。 我最初虽然很简单,但事实并

  • 问题内容: 如何从Spring Rest模板获取原始json字符串?我试过下面的代码,但它会返回不带引号的json,这会导致其他问题,我该如何按原样获取json。 问题答案: 您甚至不需要s!只需使用一个喜欢: 它将打印如下内容:

  • 问题内容: 谁能告诉我如何从控制器返回字符串消息? 如果我只是从控制器方法返回一个字符串,那么spring mvc会将其视为jsp视图名称。 问题答案: 使用以下命令在控制器中注释方法: 来自:15.3.2.6将响应主体与注释映射: 该注释[…]可以放在一个方法,并且指示返回类型应当直接写入HTTP响应主体(而不是放置在一个模型,或解释为视图名称)。