【问题标题】:How to map JSON object to Spring Object如何将 JSON 对象映射到 Spring 对象
【发布时间】:2012-06-13 18:49:27
【问题描述】:

如何将 JSON 对象映射到 Spring 对象...我有 AJAX,将 JSON 对象发布到我的 Spring 控制器,但是如何让 Spring 将 JSON 转换为 java 中的对象

Java 代码:

@RequestMapping(method=RequestMethod.POST, value="/employee")
    public ModelAndView addEmployee(@RequestBody String body) {

        System.out.println("in post: " + body);
        Source source = new StreamSource(new StringReader(body));


        System.out.println("source: " + source.toString());
        //
        // how do I turn the JSON String into a Java Object?
        //
        return new ModelAndView(XML_VIEW_NAME, "object", body);
    }

JavaSript/html 代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>This is a project to show how to use RESTful</title>
</head>
<body>
<script type="text/javascript">var contexPath = "<%=request.getContextPath()%>";</script>
<script src="<%=request.getContextPath()%>/js/jquery.js"></script>


<script type="text/javascript">
function doAjaxPost() {  


    var queryString = $('#htmlform').serialize();

    alert("doAjaxPost Called :" + queryString +":");

       $.ajax({
            contentType : "application/json",
            dataType : 'json',
            type : "POST",
            url : contexPath + "/service/employee",
            data : queryString, //json serialization (like array.serializeArray() etc)

            success : function(data) {
                alert("Thanks for submitting.  \n\n" + response.result);
               // response
            },
            error : function(request, status, error) {
                   alert('Error: ' + e); 
            }
        });
    }  
</script>

<H1>Add Employee</H1>

<p>
<form name="htmlform" id="htmlform">
<table border=1>
    <thead><tr>
        <th>ID</th>
        <th>Name</th>
        <th>Email</th>
    </tr></thead>

    <tr>
        <td><input  type="text" name="ID" maxlength="5" size="3"></td>
        <td><input  type="text" name="Name" maxlength="10" size="10"></td>
        <td><input  type="text" name="Email" maxlength="10" size="10"></td>
    </tr>

</table>
<input type="button" value="Save Employee" onclick="doAjaxPost();" />
<p>
<p>
</form>
[<a href="http://localhost:8080/RESTful/service/employees">List all Employees</a> | <a href="add.jsp">Employee Form Test</a>]


</body>
</html>

【问题讨论】:

    标签: java json spring spring-mvc


    【解决方案1】:

    确保:

    • 发送 JSON 对象,而不是 JSON 字符串
    • 将 Jackson 包含在您的类路径中

    然后你可以在控制器的方法签名处添加@RequestBody Employee employee。

    【讨论】:

      【解决方案2】:

      我想您使用的是 Spring 3.0+。查看JSON simplifications 上的 Spring Source 博客文章。看来你已经成功了一半。

      【讨论】:

        【解决方案3】:

        使用 JSON 映射库,例如 Jackson 或 Gson

        您的代码大致如下:

        Employee e;
        try {
            e = objectMapper.readValue(body, Employee .class);
        } catch (IOException e) {
            throw new IllegalArgumentException("Couldn't parse json into a employee", e);
        }
        

        如果您使用 Spring 3 或更高版本,还有更简单的方法: http://blog.springsource.org/2010/01/25/ajax-simplifications-in-spring-3-0/

        【讨论】:

          猜你喜欢
          • 2019-05-27
          • 2014-11-07
          • 2014-12-31
          • 2012-04-23
          • 2016-12-18
          • 2012-02-06
          • 2012-04-16
          • 1970-01-01
          • 2017-12-24
          相关资源
          最近更新 更多