gpt4 book ai didi

json - spring mvc restcontroller 返回 json 字符串

转载 作者:行者123 更新时间:2023-12-04 11:23:11 24 4
gpt4 key购买 nike

我有一个具有以下方法的 Spring MVC Controller :

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

它位于一个像这样开始的 Controller 中:
@RestController
@RequestMapping(value = "/root")
public class RootController

当我调用其他返回对象的方法时,这些对象被 Jackson 序列化为 JSON。但是这个返回字符串的方法不会转换为 JSON。如果不清楚,这里有一个使用 curl 的例子:
$curl http://localhost:8080/clapi/root/stringtest 
test

所以问题是没有任何引号的“测试”不是 JSON 字符串,但我的 REST 客户端需要一个字符串。我希望 curl 命令显示带有引号的字符串,因此它是合法的 JSON:
"test"

我正在使用 Spring WebMVC 4.1.3 和 Jackson 2.4.3。我曾尝试向 RequestMapping 添加一个“生产”属性,表示它应该返回 JSON。在这种情况下,返回的 Content-Type 属性是“application/json”,但仍然没有引用测试字符串。

我可以通过调用 JSON 库将 Java 字符串转换为 JSON 来解决此问题,但似乎 Spring MVC 和 Jackson 通常会自动执行此操作。然而不知何故,他们并没有在我的情况下这样做。任何想法我可能配置错误以返回测试而不是“测试”?

最佳答案

事实证明,当您使用 @EnableWebMvc 时注释它默认打开一堆 http 消息转换器。列表中的第二个是 StringHttpMessageConverter文档说将应用于 text/*内容类型。但是,在调试器单步执行后,它适用于 */* 的 String 对象。内容类型 - 显然包括 application/json .
MappingJackson2HttpMessageConverter负责application/json内容类型在此列表中更靠后。因此,对于 String 以外的 Java 对象,将调用此对象。这就是为什么它适用于对象和数组类型,而不适用于字符串 - 尽管使用生产属性设置 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 - spring mvc restcontroller 返回 json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30204974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com