Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 属性setData[JSON+;Struts2 plugin]的类型不兼容_Java_Json_Maven_Struts2_Struts2 Json Plugin - Fatal编程技术网

Java 属性setData[JSON+;Struts2 plugin]的类型不兼容

Java 属性setData[JSON+;Struts2 plugin]的类型不兼容,java,json,maven,struts2,struts2-json-plugin,Java,Json,Maven,Struts2,Struts2 Json Plugin,我需要用我当前的JAVA web应用程序配置JSON插件()。我所做的: 1) 将插件的所有依赖项添加到pom.xml文件中 <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>2.3.24.1</version> </dependen

我需要用我当前的JAVA web应用程序配置JSON插件()。我所做的:

1) 将插件的所有依赖项添加到
pom.xml
文件中

<dependency>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts2-json-plugin</artifactId>
   <version>2.3.24.1</version>
</dependency>
3) 在我的操作中添加了json的拦截器和结果类型

<action name="myMainAction"
    class="org.com.action.myMainAction">
        <interceptor-ref name="json">
           <param name="enableSMD">true</param>
        </interceptor-ref>
        <result type="json">                    
        </result>           
    <param name="requiredAuthorities">F_ADD</param>
</action>
6) 创建了一个
JSON
对象,并通过
ajax
将其传递给服务器。我可以通过GoogleChrome控制台看到,它发送数据并解析JSON对象,所有数据都在那里。但是,它确实在我的Eclipse和Chrome控制台中引发了一个异常:

处理请求期间发生异常:属性setData的类型不兼容(commonLogger.java[qtp1144623021-22]) org.apache.struts2.json.JSONException:属性setData的不兼容类型

你能给我指一个正确的方向吗?这几乎是我工作的第二天了,但似乎还没有开始工作

编辑1: 数据被发送到java端,我可以通过Chrome控制台看到它

{"data":{"recordId":"123","registrationDate":"20-07-2016","hisId":"","herId":"","lastNameHe":"Asd","firstNameHe":"Asd","middleNameHe":"Asd","workPlaceHe":"","educationHe"}}
这是被
JSON.stringify
-ed后的对象。 正如您所看到的,它有根
data
变量,然后所有其余的数据都在它下面。根据我的逻辑,ti必须在java类中找到数据的
setter
,然后调用该类的setter/getter。 另外,我重命名了类的名称等,所以不用担心命名约定)我的产品代码中有正确的东西

编辑2:

谢谢你指出我的错误@AleksandrM。现在它抛出了一个非常奇怪的错误:

无法解释的日期:“2016年7月20日”(commonlogger.java[qtp212900572-17]) java.text.ParseException:不可解析日期:“20-07-2016”

此部分的
json
变量是
registrationDate
,它在JAVA中的实现:

 private Date registrationDate;
    public Date getRegistrationDate() {
    return registrationDate;
}

public void setRegistrationDate(Date registrationDate) {
    this.registrationDate = registrationDate;

据我所知,它试图将
字符串
设置为
日期
,但无法执行。为什么json插件不能转换它?我应该在选项/设置中写些什么吗?

您希望Java代码中包含
列表数据,但JSON对象不包含任何数组。将Java代码更改为婚姻数据,或者在JSON中发布对象数组

除了
json
,您可能还需要为操作定义其他拦截器。 创建自定义拦截器堆栈并在操作配置中引用它

<interceptor-stack name="json-stack">
    <interceptor-ref name="json" />
    <interceptor-ref name="defaultStack" />
</interceptor-stack>

要将日期字符串转换为
date
对象,请使用默认格式(即
yyyy-MM-dd'HH:MM:ss
)或创建自定义格式。 或者在setter上使用
@JSON(format=“dd.MM.yyyy”)


请参阅。

如果使用defaultStack plus json拦截器而不是仅使用json拦截器,是否有效?婚姻是否有默认的无参数构造函数(或无构造函数)?注意:一个以一个大写字母开头的Java类并不好,你需要使用
defaultStack
+
json
拦截器。显示您提交的数据。@AndreaLigios,我认为这不是defaultStack的问题,也不是struts中拦截器的位置问题。不,我的Marraige类没有任何构造函数。Marraige类与hibernate连接,用于创建db表等,该类的目的只是作为描述它的纯模型。java代码中有列表,但json中没有。@AleksandrM,好的。让我更新代码,看看我将获得什么完整性,默认格式(仅限日期RFC3339),而他正在使用2.3.24.1,因此被迫使用converter@AndreaLigios关于json和类型转换的部分似乎不正确。“我要更改它。@AndreaLigios,我读过关于默认格式日期的文章,我知道这个补丁,但我无法升级,因为我使用的是一个大框架,我正在为它开发一个单独的模块。。我不想处理另一个框架问题,所以
 private Date registrationDate;
    public Date getRegistrationDate() {
    return registrationDate;
}

public void setRegistrationDate(Date registrationDate) {
    this.registrationDate = registrationDate;
<interceptor-stack name="json-stack">
    <interceptor-ref name="json" />
    <interceptor-ref name="defaultStack" />
</interceptor-stack>