JSON对象不是在Struts2 Action中设置变量

时间:2014-07-22 04:45:04

标签: java jquery ajax json struts2

我正在努力解决复杂的json对象,如下所示:

var data= {service:{
                    client:{idClient: idClient},
                    pet:{idPet: idPet},
                    employee:{idEmployee: idEmployee},
                    conclusion: ''+conclusion}};

我通过这个发送它:

$.ajax({
            url: 'registerService.action',
            type:'post',
            data: JSON.stringify(data),
            contentType: 'application/json',
            dataType: 'json',
            succes: function(data){
                //do something
            }
    }); 

触发异常:java.lang.NullPointerException,这意味着动作中的变量服务尚未实例化。

public class SomeAction extends ActionSupport{
private Service service; //getter y setter

public String registerService(){
    Integer cod= (getServiceService().registerService(service));
    return SUCCESS;
}   

Service类看起来像这个

public class Service {
//everything with its respective setter a getter
private Client client;
private Pet pet;
private Employee employee;
private String conclusion;

public Service(){
  client = new Client();
  pet = new Pet();
  employee= new Employee();
}

}

此外,不同对象的每个id都是Integer。

我希望能得到帮助 提前谢谢


在对象服务实例化之后,它的属性为null,这是因为我没有包含在struts.xml中,并且动作将各个拦截器映射为以下

struts.xml中

<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>

动作映射

<action name="registerService" class="servicioActionSpring"  method="registerService">
        <interceptor-ref name="json"/>
        <result type="json"></result>
    </action>

1 个答案:

答案 0 :(得分:1)

这是正确的属性应该初始化。

private Service service = new Service(); //getter y setter

或者您可以使用内部DI机制this方式进行。如果您正在使用其他DI框架,则应使用相应的插件。

因为您正在向操作发送JSON,所以请确保您在操作配置中使用了json拦截器。