我无法将通用 json 请求从客户端发送到服务器。这是我的服务和pojo课程。有人可以纠正我做错的地方吗?
服务:
@POST
@Path("/executeApp")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Response executeApp(Configuration configuration) {
}
配置类:这个类由任务列表组成,下面是任务抽象类。
@XmlRootElement
public class Configuration{
public Configuration() {
// TODO Auto-generated constructor stub
}
public String udid;
public boolean overrideExistingTask;
public int repeatPeriodMinutes;
public List<? extends Task> tasks;
//Getters and setters
}
任务类:
public abstract class Task {
public Task(){
}
public String testId;
public int pauseSeconds;
public int cycles;-
public abstract String getFriendlyName();
protected abstract Task<?> getTaskInstance();
//Getters and setters
}
派生类 XXXX,YYYYY 都扩展了任务:
public class XXXXX extends Task{
String friendlyName = this.getClass().getSimpleName();
//Extra varibles
public XXXXX() {
super();
}
@Override
public String getFriendlyName() {
return friendlyName;
}
@Override
protected Task<?> getTaskInstance() {
}
}
使用 json 的客户端邮递员请求:
{
"udid":"123",
"overrideExistingTask":"true",
"repeatPeriodMinutes":"2",
"tasks":[{"XXXXX":{"testId":"testId", "pauseSeconds" :"5", "cycles":"2" ,"requestId":"123" ,"url":"url", "port":"port" , "udid":"udid" }}]
}
错误:
javax.ws.rs.ProcessingException: Error deserializing object from entity stream.</p>
The server encountered an unexpected condition that prevented it from fulfilling the request.
javax.servlet.ServletException: javax.ws.rs.ProcessingException: Error deserializing object from entity stream.
如果我传递空数组而不是 XXXXX,我能够在调试模式下看到配置类(udid,overrideExistingTask,repeatPeriodMinutes(的值,但任务值来自 []。用户可以传递XXXXX,YYYYY或两者的列表。有人可以建议我在哪里做错或缺少休息注释来定义泛型类型。
配置对象将无法解析提供的 JSON 输入。
配置中的任务字段是任务列表。在提供的JSON中,它是一个键为"XXXXX"的Map(/Object(列表,值是任务对象。
如果这是要使用的 JSON,则应将配置对象中的任务字段修改为
public List<Map<String,<? extends Task>> tasks;
或
应修改 JSON 输入以发送任务列表。
{
"udid": "123",
"overrideExistingTask": "true",
"repeatPeriodMinutes": "2",
"tasks": [{
"testId": "testId",
"pauseSeconds": "5",
"cycles": "2",
"requestId": "123",
"url": "url",
"port": "port",
"udid": "udid"
}
//More task objects here
]
}