gpt4 book ai didi

java - 如何使 RESTful 服务处理响应中的自定义对象?

转载 作者:行者123 更新时间:2023-11-30 08:27:16 24 4
gpt4 key购买 nike

如何使 restful Response 中的自定义对象看起来像 native 类型。换句话说,我不想使用 getter 和 setter,而是让对象像字符串一样编码和解码。我可以使用构造函数进行解码,但我不知道如何通过服务的响应获取对象。当我运行示例时,我得到了这个结果:

<data>
<nType>123</nType>
<myType/>
<notMyType>
<value>def</value>
</notMyType>
</data>

我正在尝试让 myType 看起来像 nType。这是一个简短的代码示例:

package rscust;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.*;
import javax.ws.rs.core.*;
import javax.xml.bind.annotation.XmlRootElement;

@Path("/")
public class Service extends Application {

@XmlRootElement
public static class Data {
public String nType;
public MyType myType;
public NotMyType notMyType;
public Data() {}
}

// custom class does not work in Response
public static class MyType {
private String value;
public MyType() {}
public MyType(String value) {
this.value=value;
}
public String toString() {
return value;
}
}

// works with getter and setter, but I don't want that
public static class NotMyType {
private String value;
public NotMyType() {}
public NotMyType(String value) {
this.setValue(value);
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}

@GET
@Produces(value={MediaType.APPLICATION_XML})
public Response get(
@QueryParam(value = "ntype")String nType,
@QueryParam(value = "mytype")MyType myType,
@QueryParam(value = "notmytype")NotMyType notMyType
) {
Data data = new Data();
data.nType = nType;
data.myType = myType;
data.notMyType = notMyType;
return Response.ok().entity(data).build();

}

private HashSet<Object> singletons;
public Service() {
super();
singletons = new HashSet<Object>();
singletons.add(this);
}
public Set<Object> getSingletons() {
return singletons;
}
}

最佳答案

答案是您需要向自定义类添加注释以告诉它如何反序列化和序列化不同的字段。您的 get 方法看起来不错,但自定义类根本没有注释。 MyType 和 NotMyType 也应该有@XmlRootElement 以及注解来标记哪些字段是@Transient 哪些是@JsonProperty

@XmlRootElement
public static class Data {
@JsonProperty
public String nType;
@JsonProperty
public MyType myType;
@JsonProperty
public NotMyType notMyType;
public Data() {}
}

@XmlRootElement
public static class MyType {
@JsonProperty
private String value;
public MyType() {}
public MyType(String value) {
this.value=value;
}
public String toString() {
return value;
}
}

此外,由于您已经将这些对象作为数据的一部分,因此只需请求一个数据对象,然后您就可以从那里提取其他对象。

public Response get( @QueryParam(value = "data")Data d,){
Data d = data.nType;
}

关于java - 如何使 RESTful 服务处理响应中的自定义对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960983/

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