我有一个Java Backend响应休息请求,并带有此类的响应:
java.lang.NullPointerException
可以正常发送以下内容:
import java.util.Collection;
import java.util.Collections;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.codehaus.jackson.map.annotate.JsonSerialize;
@XmlRootElement
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class RestResponse<T> {
@XmlElement(name = "METADATA")
private JsonMetadata jsonMetadata;
private Collection<T> result;
public RestResponse() {
jsonMetadata = new JsonMetadata();
}
public RestResponse(JsonMetadata metadata) {
this.jsonMetadata = metadata;
}
public JsonMetadata getJsonMetadata() {
return jsonMetadata;
}
public void setJsonMetadata(JsonMetadata jsonMetadata) {
this.jsonMetadata = jsonMetadata;
}
public Collection<T> getResult() {
return result;
}
public void setResult(Collection<T> result) {
this.result = result;
}
public void setObjectList(Collection<T> objectList) {
if (objectList != null) {
this.result = objectList;
}
}
public void setObject(T object) {
if (object != null) {
setObjectList(Collections.singletonList(object));
}
}
public void setErrorMessage(String msg) {
jsonMetadata.setErrorMessage(msg);
}
public void setWarnMessage(String msg) {
jsonMetadata.setWarnMessage(msg);
}
}
现在,我正在尝试使用Apache Syncope,并希望使用Maven工件,例如“ read听”:
https://syncope.apache.org/docs/reference-guide.html#client-library
但是当我添加以下行时:
METADATA: {STATUS: "0", ERROR_MESSAGE: ""}
result: [{id: "4010", name: "Demo"}]
在Eclipse中访问我的proyect中的pom.xml。仅添加此行,不执行其他任何操作,然后其余响应更改为:
<dependency>
<groupId>org.apache.syncope.client</groupId>
<artifactId>syncope-client-lib</artifactId>
<version>2.1.2</version>
</dependency>
对我来说是个问题,因为我用“ METADATA”这个词来处理错误。
有人知道为什么会发生这种变化吗?
答案 0 :(得分:0)
在这种情况下,仅在第一个字段JsonMetadata中定义@XmlElement(name =“ METADATA”)。请记住,Java仅将此注释添加到其下的第一个字段!
当我创建xml时,我更喜欢在其get方法中使用表示法,例如:
@XmlRootElement(name = "root")
public class RestResponse<T> {
@XmlElement(name = "metadata")
public JsonMetadata getJsonMetadata() {
return jsonMetadata;
}
public void setJsonMetadata(JsonMetadata jsonMetadata) {
this.jsonMetadata = jsonMetadata;
}
public void setResult(<any> result) {
this.result = result;
}
@XmlElement(name="result")
public <any> getResult() {
return result;
}
记住:您必须为每个字段创建setter和getter!正确的名称(我使用netbeans ide,它会自动建议使用正确的名称添加此方法)。
但是还有另一种解决方案...
@XmlAccessorType(XmlAccessType.FIELD)
public class RestResponse<T> {
@XmlElement(name = "METADATA")
private JsonMetadata jsonMetadata;
private Collection<T> result;
//...
在上课之前使用表示法可以解决您的问题。 所以有两种方法: -添加方法(我更喜欢这一方法) -添加此标记(不添加或触摸任何内容,我不喜欢,因为该方法更有用)
不可能同时使用两种解决方案!