json格式的spring mvc输出
Posted
技术标签:
【中文标题】json格式的spring mvc输出【英文标题】:spring mvc output in json format 【发布时间】:2015-11-27 06:31:30 【问题描述】:我对 spring mvc 和 java 非常陌生。我想返回一个 json 数据而不是字符串
@RequestMapping(value = "/ex/foos", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public String getFoosAsJsonFromREST()
return "\"name\":\"MyNode\", \"width\":200, \"height\":100";
实际输出:"\"name\":\"MyNode\", \"width\":200, \"height\":100"
我想要的输出:"name":"MyNode", "width":200, "height":100
我点击了链接,但我仍然无法获得文字 json 输出
@RequestMapping(value = "/ex/foos", method = RequestMethod.GET,produces = "application/json") @ResponseBody 公共 JsonNode getFoosAsJsonFromREST()
String everything = "\"a\":2,\"b\":\"astring\",\"c\":6";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(everything);
return node;
输出 “结果”:错误, "message": "当 base64 内容在 [Source: N/A; line: -1, column: -1] 时出现意外的字符串结尾\n"
【问题讨论】:
Return literal JSON strings in spring mvc @ResponseBody的可能重复 【参考方案1】:你快到了:)
JSON 只是一种对象格式,因此您必须返回一个带有键值对的对象。
@RequestMapping(value = "/ex/foos", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public MyJSONRespone getFoosAsJsonFromREST()
MyJSONRespone myResponse = new MyJSONRespone();
myResponse.setName("MyNode");
myResponse.setWidth(200);
myResponse.setHeight(100);
return myResponse;
class MyJSONRespone
private String name;
private Integer width;
private Integer Height;
//setters and getters
如果你使用 Maven,还要确保你的 POM 中有正确的依赖:
<!-- Jackson/JSON START -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.2</version>
</dependency>
<!-- Jackson/JSON END -->
【讨论】:
有没有办法在不创建 MyJSONRespone 类的情况下输出 json 对象格式? 对不起 - 刚刚看到这个。你还需要帮助吗?【参考方案2】:当然,您可以在没有自己的类的情况下返回 json 输出。第一种方法和你的一样试试这个https://***.com/a/64482663/10353679
@RequestMapping(value = "/ex/fooss", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public ResponseEntity<JsonNode> getDeneme()
String everything = "\"name\":\"MyNode\", \"width\":200, \"height\":100";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = null;
try
node = mapper.readTree(everything);
catch (JsonProcessingException e)
e.printStackTrace();
return ResponseEntity.ok(node);
上面的例子应该可以工作
您的代码中的第二种方法只是返回 node.toString() 并带有produce =“application/json”。 json 只是格式。客户端可能只会检查 Content-Type 是 application/json,如果 json 的格式正确,客户端的解析器就会解析它。
@RequestMapping(value = "/ex/foos", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public String getDeneme()
String everything = "\"a\":2,\"b\":\"astring\",\"c\":6";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = null;
try
node = mapper.readTree(everything);
catch (JsonProcessingException e)
e.printStackTrace();
return node.toString();
重要提示:node.toString();可能会返回 NullPointerException 因为 node 可以为 null 你应该正确处理它。
另外一点是你不应该每次都创建新的 ObjectMapper。您应该将 ObjectMapper 作为一个字段注入到这个 Controller 类中,然后只使用注入的 objectMapper
【讨论】:
嘿@argmnt 你能添加一个sn-p代码来支持你的答案吗?这将大大改善您的回答。以上是关于json格式的spring mvc输出的主要内容,如果未能解决你的问题,请参考以下文章