无法反序列化为具体的Java类型
我正在构建一个健身跟踪器应用程序,允许用户跟踪他们的训练。训练由一系列动作组成。抽象运动类由运动的几个子类型扩展 抽象类:无法反序列化为具体的Java类型,java,serialization,javax.xml,Java,Serialization,Javax.xml,我正在构建一个健身跟踪器应用程序,允许用户跟踪他们的训练。训练由一系列动作组成。抽象运动类由运动的几个子类型扩展 抽象类: @XmlSeeAlso({BodyweightMovementDTO.class, CalorieMovementDTO.class, DistanceMovementDTO.class, WeightedMovementDTO.class}) public abstract class Movement { public abstract M
@XmlSeeAlso({BodyweightMovementDTO.class, CalorieMovementDTO.class,
DistanceMovementDTO.class, WeightedMovementDTO.class})
public abstract class Movement {
public abstract MovementType getType();
public abstract void setType(final MovementType type);
}
延长至:
@XmlRootElement(name = "weightedMovement")
public class WeightedMovementDTO extends Movement {
private MovementType type;
private Integer weight;
private Integer reps;
public WeightedMovementDTO(final MovementType type, final Integer weight, final Integer reps) {
this.type = type;
this.weight = weight;
this.reps = reps;
}
//Getters and Setters
}
并通过以下方式扩展:
@XmlRootElement(name = "distanceMovement")
public class DistanceMovementDTO extends Movement {
private MovementType type;
private Integer distance;
public DistanceMovementDTO(final MovementType type, final Integer distance) {
this.type = type;
this.distance = distance;
}
//Getters and setters
}
还有两个类似的班级
允许将训练或训练结果放入的资源方法如下:
@PUT
@Path("{user}/today")
@Consumes({ MediaType.APPLICATION_JSON })
public Response recordResult(@PathParam(value = "user") final String user,
final WorkoutResultDTO result) {
WorkoutController.recordResult(user, result);
return Response.ok().build();
}
WorkUtresUltdTo是我假设导致问题的对象,因为它有一个抽象运动对象的ArrayList
@XmlRootElement(name = "workout")
public class WorkoutResultDTO implements Result {
private int id = 0;
private OcsidDate date = new OcsidDate(LocalDate.now());
private Scale scale = null;
private WorkoutType workoutType = null;
private List<Movement> wod = new ArrayList<>();
private boolean complete = false;
private double time = 0.0;
private int reps = 0;
public WorkoutResultDTO() {}
public WorkoutResultDTO(final int id) {
this.id = id;
}
//Getters and Setters
}
我被引导相信,添加这一行:
@XmlSeeAlso({BodyweightMovementDTO.class, CalorieMovementDTO.class,
DistanceMovementDTO.class, WeightedMovementDTO.class})
将解决这个问题,因为注释将提供足够的信息,说明如何将抽象类反序列化为具体类型之一,但情况似乎并非如此。我是否缺少一些其他配置或需要执行此操作的自定义类?两天来我一直在努力解决这个问题,谷歌搜索了很多次,但都没有用。欢迎任何意见。谢谢
编辑:图像中附加的PUT请求的详细信息
据我所知,如果PUT请求是XML,则必须通过添加
xsi:type=“YourMovementConcreteType”
来指定移动的具体类型!谢谢你的评论,你能详细说明一下吗?我应该把那个字符串放在哪里,你能举个例子吗?我想先看看你的put请求我用postman来做put,但我用的是JSON,不是XML。我已将问题更新为包含图像。如果你需要更多的细节,请告诉我!谢谢如果您使用的是JSON,那么Xml注释的相关性如何?您实际使用的JSON解析器是什么?
@XmlSeeAlso({BodyweightMovementDTO.class, CalorieMovementDTO.class,
DistanceMovementDTO.class, WeightedMovementDTO.class})