【发布时间】:2013-02-25 07:31:17
【问题描述】:
我正在将一个对象映射到 JSON,但有一个名为 Parameters 类型为 List <SimilarityParameter> 的变量存在问题。
SimilarityParameter 看起来像这样:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SimilarityParameter {
private String name;
private String type;
public SimilarityParameter() {
}
public SimilarityParameter(String name, String type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
当这个列表很大时,一切正常。 JSON 看起来像这样
{
"parameters":[
{
"name":"threshold",
"type":"Double"
},
{
"name":"numberOfResults",
"type":"Integer"
}
]
}
这没关系,因为在客户端进行 JSON 编码后,我有一个参数数组。
问题是当 List 的大小为 1 时,Mapper 将其逻辑传输到:
{
"parameters":{
"name":"numberOfResults",
"type":"Integer"
}
}
当客户端解码这个 JSON 时,会得到一个包含 name 和 type 的数组。它会导致客户端的不一致。
我想将大小为 1 的列表映射到此:
{
"parameters":[
{
"name":"threshold",
"type":"Double"
}
]
}
所以编码后的数组包含一个参数。
这是响应的样子:
@XmlRootElement(name = "availableSimilarities")
@XmlAccessorType(XmlAccessType.FIELD)
public class SimilarityInfoResult {
private String similarityName;
private List <SimilarityParameter> parameters;
public SimilarityInfoResult() {
}
public SimilarityInfoResult(String similarityName, List<SimilarityParameter> parameters) {
this.similarityName = similarityName;
this.parameters = parameters;
}
public String getName() {
return similarityName;
}
public void setName(String similarityName) {
this.similarityName = similarityName;
}
public List<SimilarityParameter> getParameters() {
return parameters;
}
public void setParameters(List<SimilarityParameter> parameters) {
this.parameters = parameters;
}
}
有可能实现吗?
【问题讨论】:
-
您应该在问题标签中说明您的 JSON 编组器是什么。
标签: java xml json jakarta-ee jaxb