开发中越到一个坑爹问题,webserver 返回的list是 一个和多个 json-lib 翻译的不同, 在java bean中 是list ,一个的化会变成Object 多个才会变成array 对前台造成了很大的困难
比如
<
member_bankcard_querylist_response
>
<
list
>
<
bank_code
>6222023202033815035</
bank_code
>
<
status
>未审核</
status
>
</
list
>
<
success
>true</
success
>
<
sign
>8B9EEE0911F8CDC965D025911691E779</
sign
>
</
member_bankcard_querylist_response
>
翻译的是
{"member_bankcard_querylist_response": {
"list": {
"bank_code": "6222023202033815035",
"status": "未审核"
},
"success": "true",
"sign": "8B9EEE0911F8CDC965D025911691E779"
}}
但是
<
member_bankcard_querylist_response
>
<
list
>
<
bank_code
>6222023202033815035</
bank_code
>
<
status
>未审核</
status
>
</
list
>
<
list
>
<
bank_code
>6222023202033815035</
bank_code
>
<
status
>未审核</
status
>
</
list
>
<
success
>true</
success
>
<
sign
>8B9EEE0911F8CDC965D025911691E779</
sign
>
</
member_bankcard_querylist_response
>
转移之后就是
{"member_bankcard_querylist_response": {
"list": [
{
"bank_code": "6222023202033815035",
"status": "未审核"
},
{
"bank_code": "6222023202033815035",
"status": "未审核"
}
],
"success": "true",
"sign": "8B9EEE0911F8CDC965D025911691E779"
}}
想要的是都是数组,因为对于别人开发不可能进行修改.这个折磨了很久,尝试了各种办法,最后只能修改json-lib的源码来进行处理
json-lib 是根据 xml attribute的值来判断的 比如 class="array" 就处理成array class="String" 就处理成string
我们自定义了一个 class="list"
在XMLSerializer 修改处理函数
if
(clazz.compareToIgnoreCase(JSONTypes.LIST) ==
0
) {
if
(!jsonObject.has(key)) {
jsonObject.element(key,
new
JSONArray()
.element(simplifyValue(
jsonObject,
processObjectElement(element,
defaultType))));
((JSONArray) jsonObject.get(key)).setExpandElements(
true
);
classProcessed =
true
;
}
}
判断如果是class="list" 哪怕是一个也强制转成 array
比如
<
member_bankcard_querylist_response
>
<
list
class="list">
<
bank_code
>6222023202033815035</
bank_code
>
<
status
>未审核</
status
>
</
list
>
<
success
>true</
success
>
<
sign
>8B9EEE0911F8CDC965D025911691E779</
sign
>
</
member_bankcard_querylist_response
>
转换后
{"member_bankcard_querylist_response": {
"list": [ {
"bank_code": "6222023202033815035",
"status": "未审核"
}],
"success": "true",
"sign": "8B9EEE0911F8CDC965D025911691E779"
}}
在webserver中需要增加xml的描述
import
java.io.Serializable;
import
javax.xml.bind.annotation.XmlAttribute;
import
javax.xml.bind.annotation.XmlRootElement;
/**
* 返回xml描述改对象为List ,在json-lib转义的时候发现list.size() == 1 的时候改回Array
* @author JueYue
* @date 2015年4月23日 下午4:39:48
*/
@XmlRootElement
public
class
XmlListBase
implements
Serializable {
private
static
final
long
serialVersionUID = 1L;
private
String beanType =
"list"
;
@XmlAttribute
(name =
"class"
)
public
String getBeanType() {
return
beanType;
}
public
void
setBeanType(String beanType) {
this
.beanType = beanType;
}
}
只要继承这个类就可以了,得到的xml 就会加上class的attribute,可能是个个例也可能帮到大家