Java EE RESTful服务JSON编组415状态和@Xml*注释
我有一个简单的JavaEE RESTful服务,它在Payara 4.1.1.154(GlassFish 4.1.1 fork-)上使用JAX-RS(Jersey)、JPA(EclipseLink)和JAXB(EclipseLink MOXy) 我使用两个实体无线电和流,它们之间有双向链接: 无线电实体: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
@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
注释了吗?也许这就是你要找的