Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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类型_Java_Serialization_Javax.xml - Fatal编程技术网

无法反序列化为具体的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})