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输出的主要内容,如果未能解决你的问题,请参考以下文章

spring Mvc json返回json的日期格式问题

Spring mvc 返回json数组中的日期怎么格式化?

spring mvc+ajax 实现json格式数据传递

spring mvc返回json格式和json字符串

通过spring MVC从表中查询数据并转换成需要的JSON格式

Spring MVC返回Map格式JSON数据