如何将json有效负载映射到struts2中的模型bean

时间:2016-05-24 16:30:40

标签: struts2

有没有办法将json有效负载映射到Model bean。如果可能的话,请给我一个例子。

以下是我正在使用的课程。

package com.sample;

import java.io.Serializable;

public class Employee implements Serializable{
    private String firstName;
    private String lastName;
    private int id;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Employee [firstName=").append(firstName)
                .append(", lastName=").append(lastName).append(", id=")
                .append(id).append("]");
        return builder.toString();
    }

}

以下是我的动作类。

package com.sample.controller;

    import com.opensymphony.xwork2.ModelDriven;
    import com.sample.Employee;

    public class EmployeeController implements ModelDriven<Employee> {
        private String name = "Hari krishna";
        Employee emp = new Employee();

        public String addEmployee() {
            System.out.println(emp);
            return "success";
        }

        @Override
        public Employee getModel() {
            return emp;
        }
    }

以下是我的struts.xml

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="default" extends="json-default">

        <interceptors>
            <interceptor-stack name="jsonStack">
                <interceptor-ref name="json">
                    <param name="enableSMD">true</param>
                </interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <action name="addEmployee" class = "com.sample.controller.EmployeeController" method = "addEmployee">
            <interceptor-ref name="jsonStack"></interceptor-ref>
            <result type="json" />
        </action>
    </package>
</struts>

当我通过json数据&#34; {&#34; firstName&#34;:&#34; Hari&#34;,&#34; id&#34'调用动作&#34; addEmployee&#34; ; 123&#34; lastName的&#34;:&#34; assds&#34;}&#34;我得到了以下回复。我将内容类型设置为text / json。

{
"model": {
"firstName": null
"id": 0
"lastName": null
}-
}

我使用Advanced Rest Client发布数据。

1 个答案:

答案 0 :(得分:-1)

当您将json数据从客户端发送到服务器时,将它们作为字符串发送,并在action类中创建一个普通的String变量来接收并保存json的字符串。

然后,您可以使用json解析器从字符串手动填充bean, 或者使用像google gson这样的lib,它具有用于此目的的内置功能。<​​/ p>

Google Gson是一个Java序列化/反序列化库,可以将Java对象转换为JSON并返回。

您可以创建自己的struts拦截器来包装此进程或直接在您的操作类中实现它。