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

spring mvc restcontroller返回json字符串

林修真
2023-03-14

我有一个Spring MVC控制器,方法如下:

@RequestMapping(value = "/stringtest", method = RequestMethod.GET)
public String simpletest() throws Exception {
    return "test";
}

它位于一个开始如下所示的控制器内部:

@RestController
@RequestMapping(value = "/root")
public class RootController
$curl http://localhost:8080/clapi/root/stringtest 
test
"test"

我使用的是Spring WebMVC 4.1.3和Jackson 2.4.3。我尝试在RequestMapping中添加一个“produces”属性,表示它应该返回JSON。在本例中,发回的Content-Type属性是“application/json”,但仍然没有引用测试字符串。

我可以通过调用JSON库将Java字符串转换为JSON来解决这一问题,但似乎Spring MVC和Jackson通常会自动执行此操作。但不知何故,在我的案例中,他们却没有这样做。有没有什么想法,我可能配置错了,只得到测试回来,而不是“测试”?

共有1个答案

钱运浩
2023-03-14

事实证明,当您使用@enablehtml" target="_blank">webmvc注释时,它默认情况下会打开一组http消息转换器。列表中的第二个是StringHTTPMessageConverter,文档说它将应用于text/*内容类型。但是,在使用调试器单步执行之后,它将应用于*/*内容类型的字符串对象--这显然包括application/json

负责application/json内容类型的mappingJackson2HttpMessageConverter在此列表的下面。因此对于String以外的Java对象,将调用这个对象。这就是为什么它只适用于对象和数组类型,而不适用字符串--尽管有使用produces属性设置application/json内容类型的好建议。虽然该内容类型是触发该转换器所必需的,但字符串转换器首先获取了该作业!

当我为其他配置扩展WebMVCConfigurationSupport类时,我重写了以下方法,将Jackson转换器放在首位,因此当内容类型为Application/JSON时,将使用这个转换器而不是字符串转换器:

@Override
protected void configureMessageConverters(
        List<HttpMessageConverter<?>> converters) {
    // put the jackson converter to the front of the list so that application/json content-type strings will be treated as JSON
    converters.add(new MappingJackson2HttpMessageConverter());
    // and probably needs a string converter too for text/plain content-type strings to be properly handled
    converters.add(new StringHttpMessageConverter());
}

现在,当我从curl调用测试方法时,我得到了所需的“test”输出,而不仅仅是test,因此期待JSON的angular客户机现在很高兴了。

 类似资料:
  • 问题内容: 我正在开发一个使用JSON进行服务器通信的Android应用,当我尝试解析json文件时遇到了一个奇怪的问题。 这是我来自服务器的json 我通过调用地址Json-object 获得City的价值。对于这种情况,我期望为空(这是optString的意思吗?),但实际上它包含字符串“ null”。因此,进一步的null或isEmpty- checks将返回false,因为String包含

  • 我正在开发一个使用JSON进行服务器通信的Android应用程序,当我试图解析我的json文件时,我遇到了一个奇怪的问题。 这是来自服务器的json 我通过调用字符串City=address来获取City的值。我的地址Json对象上的optString(“city”,“”)。对于这种情况,我希望城市是空的(这就是optString在这里的目的,不是吗?)但实际上它包含字符串“null”。因此,进一

  • 我希望自动将对象序列化为JSON的便利性和返回原始JSON字符串的能力。我正在使用Gson而不是Jackson,因为Gson已经在我的应用程序中有一段时间了,我有现有的调整,转换器,和注释遍布我的应用程序。 我可以自动序列化POJO的: 我希望这也能奏效: 现在的结果是一个转义值: 而不是:

  • 以下endpoint以字符串形式返回用户名。 我如何构造它以返回一个json对象,该对象包含一个键,该键的值为该字符串(例如,{“user”:“joeuser”})?

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

  • 问题内容: 在某些情况下,我具有NewtonSoft JSON.NET,在控制器中,我只是从控制器中返回Jobject,一切都很好。 但是我遇到的情况是,我从另一个服务中获取了一些原始JSON,并且需要从我的webAPI中返回它。在这种情况下,我不能使用NewtonSOft,但是如果可以的话,我将根据字符串创建一个JOBJECT(这似乎是不必要的处理开销),并返回该值,这一切对世界都很好。 但是,