简单 XML 序列化与 Retrofit2 与多个内嵌项目
Simple XML Serialization with Retrofit2 with Multiple In-Line Items
将 Retrofit2 与 SimpleXmlConverterFactory 结合使用
我的问题是错误响应的 errorBody 中的多个内联(我相信?)错误。
我一直将 this link from Simple XML Serialization 作为我的信息来源。
我正在处理以下响应:
<?xml version="1.0" encoding="utf-8"?>
<Errors>
<Error>
<Code>1</Code>
<Info>This is why</Info>
</Error>
<Error>
<Code>2</Code>
<Info>This is why</Info>
</Error>
</Errors>
我目前的 java 个对象是 ErrorResponse.java:
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;
import java.util.List;
@Root(name="Errors")
public class ErrorResponse {
@ElementList(name="Error", inline = true)
List<Error> errors;
public ErrorResponse() {
// no arg constructor
}
public void setErrors(List<Error> errors) {
this.errors = errors;
}
public List<Error> getErrors() {
return this.errors;
}
}
和Error.java:
import org.simpleframework.xml.Element;
public class Error {
@Element(name="Code")
int code;
@Element(name="Info")
String info;
public Error() {
// no arg constructor
}
public void setCode(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
public void setInfo(String info) {
this.info = info;
}
public String getInfo() {
return this.info;
}
}
我在尝试解析响应的 errorBody 时得到的错误是:
java.lang.RuntimeException:
org.simpleframework.xml.core.ElementException:
Element 'Error' does not have a match in class com.my.package.ErrorResponse at line 1
如果只有 1 个错误项,我将 ErrorResponse class 更改为:
..
@Root
public class ErrorResponse {
@Element(name="Error")
Error error;
...
...
然后一切正常,花花公子。当有多个错误时,问题就来了。任何帮助或建议正确解析此 XML 都会很棒。我使用以下代码对响应进行 errorBody 解析:
Converter<ResponseBody, ErrorResponse> converter = mRetrofit.responseBodyConverter(ErrorResponse.class, new Annotation[0]);
try {
ErrorResponse errorResponse = converter.convert(response.errorBody());
} catch (IOException e) {
e.printStackTrace();
}
- 结束信息,
</Info>
,标签需要在您的示例中大写 XML
ErrorResponse
需要名称 Errors
来匹配 XML
@ElementList
在 inline
时不需要指定名称
ErrorItem
需要 @Root(name = "Error")
这是 ErrorResponse
的代码:
@Root(name = "Errors")
public class ErrorResponse {
@ElementList(inline = true)
List<Error> errors;
public ErrorResponse() {
// no arg constructor
}
public void setErrors(List<Error> errors) {
this.errors = errors;
}
public List<Error> getErrors() {
return this.errors;
}
}
对于Error
:
@Root(name = "Error")
public class Error {
@Element(name = "Code")
int code;
@Element(name = "Info")
String info;
public Error() {
// no arg constructor
}
public void setCode(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
public void setInfo(String info) {
this.info = info;
}
public String getInfo() {
return this.info;
}
}
固定样本XML:
<?xml version="1.0" encoding="utf-8"?>
<Errors>
<Error>
<Code>1</Code>
<Info>This is why</Info>
</Error>
<Error>
<Code>2</Code>
<Info>This is why</Info>
</Error>
</Errors>
将 Retrofit2 与 SimpleXmlConverterFactory 结合使用
我的问题是错误响应的 errorBody 中的多个内联(我相信?)错误。
我一直将 this link from Simple XML Serialization 作为我的信息来源。
我正在处理以下响应:
<?xml version="1.0" encoding="utf-8"?>
<Errors>
<Error>
<Code>1</Code>
<Info>This is why</Info>
</Error>
<Error>
<Code>2</Code>
<Info>This is why</Info>
</Error>
</Errors>
我目前的 java 个对象是 ErrorResponse.java:
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;
import java.util.List;
@Root(name="Errors")
public class ErrorResponse {
@ElementList(name="Error", inline = true)
List<Error> errors;
public ErrorResponse() {
// no arg constructor
}
public void setErrors(List<Error> errors) {
this.errors = errors;
}
public List<Error> getErrors() {
return this.errors;
}
}
和Error.java:
import org.simpleframework.xml.Element;
public class Error {
@Element(name="Code")
int code;
@Element(name="Info")
String info;
public Error() {
// no arg constructor
}
public void setCode(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
public void setInfo(String info) {
this.info = info;
}
public String getInfo() {
return this.info;
}
}
我在尝试解析响应的 errorBody 时得到的错误是:
java.lang.RuntimeException:
org.simpleframework.xml.core.ElementException:
Element 'Error' does not have a match in class com.my.package.ErrorResponse at line 1
如果只有 1 个错误项,我将 ErrorResponse class 更改为:
..
@Root
public class ErrorResponse {
@Element(name="Error")
Error error;
...
...
然后一切正常,花花公子。当有多个错误时,问题就来了。任何帮助或建议正确解析此 XML 都会很棒。我使用以下代码对响应进行 errorBody 解析:
Converter<ResponseBody, ErrorResponse> converter = mRetrofit.responseBodyConverter(ErrorResponse.class, new Annotation[0]);
try {
ErrorResponse errorResponse = converter.convert(response.errorBody());
} catch (IOException e) {
e.printStackTrace();
}
- 结束信息,
</Info>
,标签需要在您的示例中大写 XML ErrorResponse
需要名称Errors
来匹配 XML@ElementList
在inline
时不需要指定名称
ErrorItem
需要@Root(name = "Error")
这是 ErrorResponse
的代码:
@Root(name = "Errors")
public class ErrorResponse {
@ElementList(inline = true)
List<Error> errors;
public ErrorResponse() {
// no arg constructor
}
public void setErrors(List<Error> errors) {
this.errors = errors;
}
public List<Error> getErrors() {
return this.errors;
}
}
对于Error
:
@Root(name = "Error")
public class Error {
@Element(name = "Code")
int code;
@Element(name = "Info")
String info;
public Error() {
// no arg constructor
}
public void setCode(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
public void setInfo(String info) {
this.info = info;
}
public String getInfo() {
return this.info;
}
}
固定样本XML:
<?xml version="1.0" encoding="utf-8"?>
<Errors>
<Error>
<Code>1</Code>
<Info>This is why</Info>
</Error>
<Error>
<Code>2</Code>
<Info>This is why</Info>
</Error>
</Errors>