使用$ .getJSON我的结果可以是空的,单个值或值列表。
如果结果包含单个值,我可以通过result.someReturnedValue访问数据,但是如果结果包含列表,则必须使用数组语法循环遍历结果数据以访问数据E.g.结果[I] .someReturnedValue
现在我不想两次编写相同的代码来处理每种类型的结果。 (我将结果附加到DOM元素,当我必须考虑两种符号时,代码变得越来越大)是否有一种通用的方法可以处理结果以防止这种重复?
单个结果的示例;
$('div[id="'+divId+'"]').append("<td>" + result.someValue1+ "</td>");
$('div[id="'+divId+'"]').append("<td>" + result.someValue2+ "</td>");
$('div[id="'+divId+'"]').append("<td>" + result.someValue2+ "</td>");
多个结果的示例:
$('div[id="'+divId+'"]').append("<td>" + result[i].someValue1+ "</td>");
$('div[id="'+divId+'"]').append("<td>" + result[i].someValue2+ "</td>");
$('div[id="'+divId+'"]').append("<td>" + result[i].someValue2+ "</td>");
答案 0 :(得分:2)
让你的JSON返回一个对象或数组总是(如果没有结果,它可能是空的。)
然后,您可以迭代内容而无需特殊情况零,一个或多个元素(您将始终使用现在的“多个结果”代码路径)。如果你确实需要特殊情况,它也将是微不足道的:
switch(result.length) {
case 0:
case 1: // etc
}
答案 1 :(得分:1)
好的,我找到了解决这个问题的方法。您可以创建自己的Provider类,Jersey将在生成JSON响应时使用。
@Component
@Provider
public class
JAXBContextResolver implements ContextResolver<JAXBContext> {
private final JAXBContext context;
private final Class[] cTypes = { SomeCustomClass.class };
public JAXBContextResolver() throws JAXBException {
this.context = new JSONJAXBContext(JSONConfiguration.natural().build(),
cTypes);
}
public JAXBContext getContext(Class<?> objectType) {
for (Class type : cTypes) {
if (type == objectType) {
return context;
}
}
return null;
}
此提供程序使用NATURAL JSON表示法,该表示法按列表格式的要求序列化对象。
通过包含必要的注释/ bean定义
,确保Spring知道该类答案 2 :(得分:0)
result
总是是一个数组,即使它是空的或只有一个元素; result[i]
包含数组而不是按顺序编号的属性,并迭代它。