Java EE RESTful服务JSON编组415状态和@Xml*注释

Java EE RESTful服务JSON编组415状态和@Xml*注释,java,json,rest,jpa,jaxb,Java,Json,Rest,Jpa,Jaxb,我有一个简单的JavaEE RESTful服务,它在Payara 4.1.1.154(GlassFish 4.1.1 fork-)上使用JAX-RS(Jersey)、JPA(EclipseLink)和JAXB(EclipseLink MOXy) 我使用两个实体无线电和流,它们之间有双向链接: 无线电实体: @Entity @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Radio { @Id

我有一个简单的JavaEE RESTful服务,它在Payara 4.1.1.154(GlassFish 4.1.1 fork-)上使用JAX-RS(Jersey)、JPA(EclipseLink)和JAXB(EclipseLink MOXy)

我使用两个实体无线电和流,它们之间有双向链接:

无线电实体:

@Entity
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Radio {

    @Id
    @GeneratedValue
    private long id;

    @Column(unique = true, nullable = false)
    private String name;

    @Column(nullable = false)
    private String genre;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @XmlIDREF
    private List<Stream> streams;

    @Version
    private long version;
    ... constructors, getters, setters
}
和RESTFul资源处理程序:

@Path("/radios")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class RadioResource {

    @Inject
    private RadioService radioService;

    public RadioResource() {}

    @GET
    @Path("/{radioId}")
    public Radio getById(@PathParam("radioId") long id) throws com.roks.radio.rt.services.NotFoundException {
        return radioService.findById(id);
    }

    @POST
    public Response create(Radio radio, @Context UriInfo uriInfo) throws AlreadyExistsException {
        radioService.create(radio);
        return Response.created(
                uriInfo.getAbsolutePathBuilder().path(
                        String.valueOf(radio.getId())
                ).build()
        ).entity(radio).build();
    }
}
使用application/json服务器类型执行POST请求时,使用415状态代码进行响应(不支持mediatype)。当我从代码中删除@XmlID和@XmlIDREF注释时,除了JSON输出中缺少“streams”字段外,所有注释都可以正常工作(201创建一次)

我认为“streams”不存在,因为当streams列表为空时,result JSON对象中存在循环引用。但我试图用@XmlID和@XmlREFID注释删除此引用,但JSON编组停止工作

在JSON输出中,我主要需要带有streams ID的“streams”字段


我的代码有什么问题?

尝试使用注释

@JsonProperty
在要用json(org.codehaus.jackson.annotate.JsonProperty)封送的getter上


您是否在项目中使用jersey-media-moxy.jar?它的目的是将对象绑定到JSON。我用过一次,但我不确定我是否还有来源。

尝试使用注释

@JsonProperty
在要用json(org.codehaus.jackson.annotate.JsonProperty)封送的getter上


您是否在项目中使用jersey-media-moxy.jar?它的目的是将对象绑定到JSON。我用过一次,但我不确定我是否还有源代码。

我发现与Jackson一起使用的\@JsonProperty注释,但我使用EclipseLink MOXy,当我删除\@Xml注释时,如何处理实体之间的循环链接?这是真的,我将编辑我的答案,因为您需要注释:您可以发布删除xml注释时得到的答案吗?如果没有XmlID和XmlIDREF注释,我已经创建了201个状态,主体为:{“id”:2,“名称”:“radio 2”,“流派”:“rock”,版本:1}.JSON编组在我添加此批注时停止工作。同样的结果,当我发布帖子时,我的状态为415。没有XmlID和XmlIDREF,结果与我之前的答复一样。我发现\@JsonProperty批注与Jackson一起使用,但我使用EclipseLink MOXy,当我删除\@Xml批注时,实体之间的循环链接怎么办?这是true,我将编辑我的答案,因为您需要注释:您可以发布删除xml注释时得到的答案吗?如果没有XmlID和XmlIDREF注释,我已经创建了201个状态,主体为:{“id”:2,“名称”:“radio 2”,“流派”:“rock”,版本:1}。当我添加此注释时,JSON编组停止工作。同样的结果是,当我发布帖子时,我的状态为415。在没有XmlID和XmlIDREF的情况下,结果与我之前的回答一样。您是否查看了流id的
@XmlValue
注释?也许这就是你想要的。你看过流id的
@XmlValue
注释了吗?也许这就是你要找的