【问题标题】:Spring MVC -> JSON responseSpring MVC -> JSON 响应
【发布时间】:2011-05-11 08:10:06
【问题描述】:

我有一个 JAVA EE 后端,我正在使用 Spring MVC。我有一个这样的 AJAX 调用:

function getAllProjects() {
        $.getJSON("project/getall", function(allProjects) {
            ???
        });
    }

我的后台系统:

@RequestMapping(value="/getall", method=RequestMethod.GET)
public @ResponseBody ??? getAllProjects() {
    ???
}

我必须实施哪些内容才能发挥作用?在后端系统中,我从数据库中调用了项目的唯一 ID 和名称,例如:

1 => My Test Project
4 => Another One
23 => One More Test

id和项目名应该返回给前端系统,这样我就可以这样构建一个HTML ul/li列表了:

<ul>
    <li><a href="/1">My Test Project</a></li>
    <li><a href="/4">Another One</a></li>
    <li><a href="/23">One More Test</a></li>
</ul>

有谁知道如何做到这一点?

【问题讨论】:

    标签: java html ajax json spring-mvc


    【解决方案1】:

    这些答案的其余部分已经过时了!现在很容易

    • 将 Jackson2 添加到您的类路径
    • 使用@RestController

    例如:

    @RestController
    public class MyController {
    
        @RequestMapping("/thing")
        public MyThing thing() {
            return new MyThing();
        }
    
    }
    

    参考: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-write-a-json-rest-service

    【讨论】:

      【解决方案2】:

      您也可以使用 org.json 的 JSONArray 和 JSONObject 来构造 JSON 输出,然后返回一个 String 值作为 @ResponseBody。

      http://www.json.org/javadoc/org/json/JSONObject.html

      @RequestMapping(value="/getall", method=RequestMethod.GET)
      public @ResponseBody String getAllProjects() {
          ...
          JSONArray jsonItems = new JSONArray();
      
          JSONObject jsonItem1 = new JSONObject();
          jsonItem1.put("id", "1");
          jsonItem1.put("name", "My Test Project");
      
          JSONObject jsonItem2 = new JSONObject();
          jsonItem2.put("id", "4");
          jsonItem2.put("name", "Another one");
      
          jsonItems.put(jsonItem1);
          jsonItems.put(jsonItem2);
      
          return jsonItems.toString();
      }
      

      您应该在 ajax 请求的成功回调中得到类似的信息。

      [{
         "id":"1",
         "name":"My Test Project"
      },{
         "id":"4",
         "name":"Another one"
      }]
      

      您可以使用这些数据来使用 javascript 附加您的 ul li 或使用 _underscore 模板来呈现您的 UI。

      【讨论】:

      • 这个解决方案更有效吗?还是使用 Jackson 函数 writeValueAsString 更好?
      【解决方案3】:

      这里建议: Spring 3 JSON with MVC 结帐这个网站: http://spring-json.sourceforge.net/ 它有关于如何在 Spring 框架中执行此操作的非常好的工作示例。

      【讨论】:

        【解决方案4】:

        你需要:

        • Jackson JSON Mapper 添加到类路径
        • &lt;mvc:annotation-driven&gt; 添加到您的配置中
        • 返回Map&lt;Integer, String&gt;

        对于更复杂的情况,当您需要为每个处理程序方法配置映射过程时,您可以使用 MappingJacksonJsonView 而不是 @ResponseBody,正如 Stepen C 建议的那样。

        【讨论】:

        【解决方案5】:

        您需要阅读 Spring 用户指南的第 15.5 章,其中描述了如何配置 MVC 视图,以及简要描​​述 JSON 映射视图的第 16.10 章。然后阅读 MappingJacksonJsonView 等的 javadocs。

        【讨论】:

        • 文档参考链接会有所帮助
        • @cdalxndr - 你有吗?请添加它们!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多