spring mvc restcontroller return json 字符串
spring mvc restcontroller return json string
我有一个 Spring MVC 控制器,方法如下:
@RequestMapping(value = "/stringtest", method = RequestMethod.GET)
public String simpletest() throws Exception {
return "test";
}
它位于一个控制器内,启动方式如下:
@RestController
@RequestMapping(value = "/root")
public class RootController
当我调用 return 对象的其他方法时,这些对象被 Jackson 序列化为 JSON。但是这个returns一个String的方法并没有转换成JSON。如果不清楚,这里有一个使用 curl 的例子:
$curl http://localhost:8080/clapi/root/stringtest
test
所以问题是没有任何引号的 "test" 不是 JSON 字符串,但我的 REST 客户端需要一个字符串。我希望 curl 命令显示带有引号的字符串,所以它是合法的 JSON 而不是:
"test"
我正在使用 Spring WebMVC 4.1.3 和 Jackson 2.4.3。我试过向 RequestMapping 添加一个 "produces" 属性,表示它应该 return JSON。在这种情况下,发回的 Content-Type 属性是 "application/json" 但测试字符串仍然没有被引用。
我可以通过调用 JSON 库将 Java 字符串转换为 JSON 来解决这个问题,但似乎 Spring MVC 和 Jackson 通常会自动执行此操作.然而不知何故,他们在我的案例中没有这样做。我可能配置错误的任何想法只是测试回来而不是 "test"?
尝试这样的事情
@RequestMapping(value = "/stringtest", method = RequestMethod.GET, produces="application/json")
public @ResponseBody String simpletest() throws Exception {
return "test";
}
试试这个:
@RequestMapping(value = "/stringtest", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
事实证明,当您使用 @EnableWebMvc
注释时,它会默认打开一堆 http 消息转换器。列表中的第二个是 StringHttpMessageConverter
,文档说它将应用于 text/*
内容类型。但是,在使用调试器逐步完成后,它适用于 */*
内容类型的字符串对象 - 显然包括 application/json
.
负责 application/json
内容类型的 MappingJackson2HttpMessageConverter
在此列表的下方。因此,对于 String 以外的 Java 个对象,将调用此对象。这就是为什么它适用于对象和数组类型,但不适用于字符串 - 尽管使用 produces 属性设置 application/json
内容类型的建议很好。尽管该内容类型是触发此转换器所必需的,但字符串转换器抢先了工作!
当我为其他一些配置扩展 WebMvcConfigurationSupport
class 时,我覆盖了以下方法以将 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 客户端是现在很开心。
我有一个 Spring MVC 控制器,方法如下:
@RequestMapping(value = "/stringtest", method = RequestMethod.GET)
public String simpletest() throws Exception {
return "test";
}
它位于一个控制器内,启动方式如下:
@RestController
@RequestMapping(value = "/root")
public class RootController
当我调用 return 对象的其他方法时,这些对象被 Jackson 序列化为 JSON。但是这个returns一个String的方法并没有转换成JSON。如果不清楚,这里有一个使用 curl 的例子:
$curl http://localhost:8080/clapi/root/stringtest
test
所以问题是没有任何引号的 "test" 不是 JSON 字符串,但我的 REST 客户端需要一个字符串。我希望 curl 命令显示带有引号的字符串,所以它是合法的 JSON 而不是:
"test"
我正在使用 Spring WebMVC 4.1.3 和 Jackson 2.4.3。我试过向 RequestMapping 添加一个 "produces" 属性,表示它应该 return JSON。在这种情况下,发回的 Content-Type 属性是 "application/json" 但测试字符串仍然没有被引用。
我可以通过调用 JSON 库将 Java 字符串转换为 JSON 来解决这个问题,但似乎 Spring MVC 和 Jackson 通常会自动执行此操作.然而不知何故,他们在我的案例中没有这样做。我可能配置错误的任何想法只是测试回来而不是 "test"?
尝试这样的事情
@RequestMapping(value = "/stringtest", method = RequestMethod.GET, produces="application/json")
public @ResponseBody String simpletest() throws Exception {
return "test";
}
试试这个:
@RequestMapping(value = "/stringtest", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
事实证明,当您使用 @EnableWebMvc
注释时,它会默认打开一堆 http 消息转换器。列表中的第二个是 StringHttpMessageConverter
,文档说它将应用于 text/*
内容类型。但是,在使用调试器逐步完成后,它适用于 */*
内容类型的字符串对象 - 显然包括 application/json
.
负责 application/json
内容类型的 MappingJackson2HttpMessageConverter
在此列表的下方。因此,对于 String 以外的 Java 个对象,将调用此对象。这就是为什么它适用于对象和数组类型,但不适用于字符串 - 尽管使用 produces 属性设置 application/json
内容类型的建议很好。尽管该内容类型是触发此转换器所必需的,但字符串转换器抢先了工作!
当我为其他一些配置扩展 WebMvcConfigurationSupport
class 时,我覆盖了以下方法以将 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 客户端是现在很开心。