gpt4 book ai didi

rest - 使用 JAX-RS 编码列表

转载 作者:行者123 更新时间:2023-12-02 05:26:09 25 4
gpt4 key购买 nike

我习惯于使用生成 wsdl 文件的 jax-ws,然后可以使用 maven 插件基于此 wsdl 文件及其 xsd 生成客户端。使用此客户端一点也不麻烦,您不必真正考虑后台发生的事情,如编码、http 传输等。

我目前正在开发一个使用 jaxb 解码对象的 jax-rs 项目。其中一个方法返回一个字符串列表,但似乎jaxb 不知道如何编码这个,这有点令人惊讶,因为它确实知道如何编码实体列表(例如,客户).

此外,我自己为 jax-rs 服务编写了一个客户端,使用 jaxb 处理 http 响应和有效负载的解码。使用 jaxb 编码和解码真的很麻烦,因为它不能自动编码或解码添加到其上下文的实体列表,更不用说字符串列表了。

我想知道是否有一些简洁的方法可以使用 restful web 服务免费获得所有这些?这必须非常轻量级,并且客户端必须易于分发。

谢谢! meteor

无法使用 jaxrs 和 jaxb 的服务方法:

@GET
@Path("/{customerId}")
@Produces(MediaType.APPLICATION_XML)
public List<String> isCustomerLocked(@PathParam("customerId") Long customerId) {


}

尝试编码/解码文本负载的客户端代码。添加到未显示的 jaxbcontext 的类:

javax.xml.bind.Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(obj, stringwriter)

javax.xml.bind.Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.unmarshal(inputstream)

最佳答案

我会使用 JAXB 来包装数据。对于一个简单的 List<String>这可能看起来有点矫枉过正。但在大多数情况下,您想要取消/编码资源表示,而不是简单的对象。

记住:REST 不是 RPC!

如果你真的想要 tom un-/marshall List<String>编写 JAX-RS 提供程序。但我更喜欢使用 JAXB。

S.java

@XmlRootElement
public class S {

private String s;

public S() {
}

public S(String s) {
this.s = s;
}

public String getS() {
return s;
}

public void setS(String s) {
this.s = s;
}
}

Ss.java

@XmlRootElement(name="ss-wrapper")
public class Ss {

private List<S> ss;

public List<S> getSs() {
return ss;
}

public void setSs(List<S> ss) {
this.ss = ss;
}

public Ss(List<S> ss) {
this.ss = ss;
}

public Ss() {
}
}

JAX-RS 类

@Path("/strings")
@GET
@Produces(MediaType.APPLICATION_XML)
public Response getListOfStrings() {
S s1 = new S("foo");
S s2 = new S("bar");
List<S> strings = new ArrayList<S>();
strings.add(s1);
strings.add(s2);
Ss ss = new Ss(strings);
return Response.ok(ss).build();
}

XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ss-wrapper>
<ss>
<s>foo</s>
</ss>
<ss>
<s>bar</s>
</ss>
</ss-wrapper>

关于rest - 使用 JAX-RS 编码列表 <String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13069135/

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