Сериализация реализованного класса с учетом интерфейса java с использованием Jersy Moxy в Jax-Rs - PullRequest
1 голос
/ 20 июня 2020

Я пытаюсь реализовать веб-службу RESTful с помощью JAX-RS. Я использую Jersy MOXY 2.16 в качестве провайдера JSON. Ниже приведены примеры DTO, которые я использую.

@XmlSeeAlso(value = { B.class, C.class })
public interface A extends Serializable {

}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"id", "name"})
public class B implements A{
    
    @XmlAttribute
    private int id;
    
    @NotEmpty
    @NotNull
    private String name;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"id", "name"})
public class C implements A{
    
    @XmlAttribute
    private int id;
    
    @NotNull
    @NotEmpty
    private String name;
}

Я не создавал никаких классов Provider и не применял к нему какие-либо пользовательские конфигурации. Теперь, если я попытаюсь отправить запрос POST с телом JSON реализованных классов, то есть B или C, он будет успешно десериализован в соответствующие DTO.

@Path("/b")
public class ResourceB{
    
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response add(@Valid B b) throws Exception {
        
    }

Но если я попробую использовать интерфейс A как запрос POST параметр метода и отправьте B или C class JSON body, я получаю 500 internal server error без сообщения об ошибке.

@Path("/b")
public class ResourceB{
    
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response add(@Valid A a) throws Exception {

    }

Хотел бы услышать решение или предложение по этому поводу.

...