0

我计划使用 XStream 和 Java 在对象和 XML 请求以及 XML 响应和对象之间进行转换,其中 XML 通过 HTTP/HTTPS 流动。在响应方面,我可以得到一个“成功”的响应,它似乎会映射到一个 Java 类,或者一个“失败”的响应,它似乎会映射到另一个 Java 类。

例如,对于“文件列表”请求,我可以得到肯定的响应,例如,

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <success>true</success>
  <files>
    <file>[...]</file>
    <file>[...]</file>
    <file>[...]</file>
  </files>
</response>

或者我可能会得到否定的回应,例如,

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <success>false</success>
  <error>
    <errorCode>-502</errorCode>
    <systemMessage>[...]AuthenticationException</systemMessage>
    <userMessage>Not authenticated</userMessage>
  </error>
</response>

为了处理这个问题,我应该在一个类中包含两种情况下的字段,还是应该以某种方式使用 XStream 来“有条件地”创建两个潜在类之一?

来自同一对象中的两个响应案例的字段的案例看起来像这样:

Class Response {
  boolean success;
  ArrayList<File> files;
  ResponseError error;
  [...]
}

Class File {
  String name;
  long size;
  [...]
}

Class ResponseError {
  int errorCode;
  String systemMessage;
  String userMessage;
  [...]
}

我不知道“在成功或错误的情况下使用 XStream 并创建不同的对象”是什么样的。有可能以某种方式做到这一点吗?这是更好还是更糟的方式?

无论如何,任何关于如何使用 XStream 处理这种成功与失败响应案例的建议都将不胜感激。提前致谢!

4

2 回答 2

0

在实际处理这个问题时,我发现第一个案例(包括两个案例的一个类中的字段)似乎工作得很好,所以也许这就是要走的路。

在这种情况下,Response设置success字段的成功和不成功形式,在不成功的情况下,ResponseError也会返回。

Class Response {
  boolean success;
  ArrayList<File> files;
  ResponseError error;
  [...]
}

Class File {
  String name;
  long size;
  [...]
}

Class ResponseError {
  int errorCode;
  String systemMessage;
  String userMessage;
  [...]
}
于 2010-05-26T18:07:19.743 回答
0

我只是在几年前简单地使用过 XStream,但是如果你想要两个不同的类,为什么不为这两种情况使用两个不同的根标签(例如成功和失败)?

如果您也使用 XStream 生成 XML,则这些类可以具有公共基类或接口,如果这对于使事情在服务器端正常工作是必要的。

于 2010-05-19T07:46:07.223 回答