【问题标题】:Apache Syncope modify @XmlElementApache 晕厥修改 @XmlElement
【发布时间】:2018-11-30 12:56:56
【问题描述】:

我有一个带有此类响应的 Java 后端响应休息请求:

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);
  }

}

发送这样的东西可以正常工作:

METADATA: {STATUS: "0", ERROR_MESSAGE: ""} 
result: [{id: "4010", name: "Demo"}]

现在我正在尝试使用 Apache Syncope 并想使用 maven 工件,例如 read hear:

https://syncope.apache.org/docs/reference-guide.html#client-library

但是当我添加这行时:

<dependency>
  <groupId>org.apache.syncope.client</groupId>
  <artifactId>syncope-client-lib</artifactId>
  <version>2.1.2</version>
</dependency>

到我在 Eclipse 中的项目中的 pom.xml。只添加这一行,不要做任何其他事情,然后其余响应变为:

jsonMetadata: {status: "0", errorMessage: ""}
result: [{id: "4010", name: "Demo"}]

对我来说是个问题,因为我用这个“元数据”字来管理错误。

有谁知道为什么会发生这种变化?

【问题讨论】:

    标签: java json xml apache apache-syncope


    【解决方案1】:

    在这种情况下,您仅在第一个字段 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;
    //...
    

    在上课前使用此符号可以解决您的问题。 所以有2种方式: -添加方法(我更喜欢这个) -添加这个符号(没有添加或触摸任何东西,我不喜欢,因为该方法更有用)

    不能同时使用这两种解决方案!

    【讨论】:

    • 非常感谢 Amith,但我仍然遇到问题。看起来问题出在 RestResponse 类上,但我尝试两种解决方案,第一个仍然向我发送元数据的 jsonMetadata ... 而第二个 Eclipse 给我一个错误:XmlAccessType 无法解析为变量。 ...也许我可以发布我的代码,但在这里我不能:-(
    • 现在我认为问题出在 Apache Syncope,我不使用它(我通常使用其他),也许问题可能是一些声明或导入。你的课没问题,!也许你必须在你的 pom 文件中添加一些属性。例如我把这个放在我的,(我使用maven)UTF-81.81.8
    • 是的,看起来问题出在 Apache Syncipe.... 希望有人可以帮助我,因为我使用了您的属性但仍然无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2018-07-18
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多