gpt4 book ai didi

java - JAX-RS unrmashalling @XmlIDREF

转载 作者:行者123 更新时间:2023-11-30 09:45:26 26 4
gpt4 key购买 nike

我已经研究这个问题好几个小时了,可能很简单,但我不再明白了:

我有一个通过 jax-rs 呈现为 json 的实体 (Param)。该实体引用另一个实体(步骤)。在编写/读取 json 时,我不想看到整个步骤实体,而只想看到它的 id,所以我使用此代码:

@Entity
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Param implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
long id;
@Column(name = "KEYNAME")
String key;
String value;
@XmlIDREF
Step step;
}

非常适合编码。

所以任何 GET 请求都会向我显示以下内容:

{id: 1,
key: "a",
value: "b",
step: 53
}

但是当我向服务器发送一些参数时,它无法将数字 ID 映射回步骤实体。

我需要为解码器提供自定义 IDResolver。但是我该如何配置解码器???? Jax-RS servlet 正在为我进行编码。我的代码看起来像这样:

@Path("param")
public class ParamRepresentation {

/**
* Retrieves representation of an instance of ParamRepresentation
* @return an instance of Param
*/
@GET
@Produces("application/json")
@Path("{ID}")
public Param getJson(@PathParam("ID") long id) {
return (Param) ctr.find(id, Param.class);
}


@PUT
@Path("{ID}")
@Consumes("application/json")
@Produces("application/json")
public SuccessMessage updateStep(@PathParam("ID") long id, Param p) {
ctr.update(p);
ParamSuccessMessage sm = new ParamSuccessMessage();
sm.setSuccess(true);
sm.setParam(p);
return sm;
}
}

那么我该如何配置解码器呢?????

最佳答案

我认为您误解了 IDREF 在 XML 模式中的用途。它允许您在同一文档中引用另一个标记为 ID 的元素(即,在 JAXB 中使用 @XmlID 注释)。您不能用它来指代世界其他地方的 ID;为此,您将使用 URI(可能带有片段标识符部分)。要在 JAXB 中执行那些,您可以使用:

@XmlElement    // You might be able to omit this part; it's here for clarity
@XmlSchemaType(name = "anyURI")
public URI exampleField;

然后您需要确定 URI 是否指向您知道的东西(即解析 URI 并查看它是否指向您自己)并处理片段标识符。或者使用更常见的技巧,只使用一个字符串,而不必担心试图神奇地将所有内容连接到绑定(bind)层中。 (这在实践中效果很好。)

关于java - JAX-RS unrmashalling @XmlIDREF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7518256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com