gpt4 book ai didi

java - 属性 setData 的不兼容类型 [JSON+Struts2 插件]

转载 作者:行者123 更新时间:2023-11-30 08:00:32 28 4
gpt4 key购买 nike

我需要使用我当前的 JAVA 网络应用程序配置 JSON 插件 ( https://struts.apache.org/docs/json-plugin.html )。我做了什么:

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

<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.3.24.1</version>
</dependency>

2) 使用json-default

扩展struts.xml中的包
<package name="my-test-package" extends="xxx, json-default"
namespace="/my-test-package">

3) 在我的action中添加了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>

4) 创建了一个只有 setter/getter 的模型类 Marriage

5) 创建 Action 类,命名为 myMainAction,代码如下

private List <Marriage> data;

public List<Marriage> getData() {
return data;
}
public void setData(List<Marriage> data) {
System.out.println("Inside the setter ");
this.data = data;
}


@Override
public String execute() throws Exception {

System.out.println(data.get(0).getLastNameHe());

return SUCCESS;
}

6) 创建一个JSON 对象并通过ajax 将其传递给服务器。我可以通过 Google Chrome 控制台看到,它发送数据并解析 JSON 对象,所有数据都在那里。但是,它确实在我的 Eclipse 和 Chrome 控制台中抛出了异常:

Exception occurred during processing request: Incompatible types for property setData (CommonsLogger.java [qtp1144623021-22]) org.apache.struts2.json.JSONException: Incompatible types for property setData

你能给我指出一些正确的方向吗,这已经是我工作的第二天了,但它似乎并没有开始工作。

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

{"data":{"recordId":"123","registrationDate":"20-07-2016","hisId":"","herId":"","lastNameHe":"Asd","firstNameHe":"Asd","middleNameHe":"Asd","workPlaceHe":"","educationHe"}}

这是经过 JSON.stringify 处理后的对象。如您所见,它有根 data 变量,然后所有其余数据都在它下面。根据我的逻辑,ti 必须在我的 java 类中找到数据的 setter,然后调用该类的 setter/getter。P.S 我重命名了类的名称等,所以不用担心命名约定)我的生产代码确实有正确的东西。

编辑2:

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

Unparseable date: "20-07-2016" (CommonsLogger.java [qtp212900572-17]) java.text.ParseException: Unparseable date: "20-07-2016"

这部分的json变量是registrationDate及其在JAVA中的实现:

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

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

据我所知,它试图将 string 设置为 date 但它无法做到。为什么 json-plugin 不能转换呢?我应该在选项/设置中写点什么吗?

最佳答案

您期待的是List<Marriage> data在 Java 代码中,但您的 JSON 对象不包含任何数组。将 Java 代码更改为 Marriage data或在 JSON 中发布对象数组。

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

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

对于日期字符串为Date对象转换使用默认格式(即 yyyy-MM-dd'T'HH:mm:ss )或创建自定义格式 Struts type converter 。或使用 @JSON(format = "dd.MM.yyyy")在二传手上。

参见 this follow up question .

关于java - 属性 setData 的不兼容类型 [JSON+Struts2 插件],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473281/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com