Java 单个项目的列表将变为单个项目

Java 单个项目的列表将变为单个项目,java,json,web-services,list,arraylist,Java,Json,Web Services,List,Arraylist,我有一个方法,它返回一个包含列表的对象。如果列表只有一个元素长,JSON会删除“[']”,这会混淆我们的客户端软件 @GET @Path("list") @Produces("application/json") public Three findThreeList() { One one = new One(); one.setFirst("previous"); List<One> ones = new ArrayList<One>(1); ones.add(one)

我有一个方法,它返回一个包含列表的对象。如果列表只有一个元素长,JSON会删除“[']”,这会混淆我们的客户端软件

@GET
@Path("list")
@Produces("application/json")
public Three findThreeList()
{ One one = new One(); one.setFirst("previous"); List<One> ones = new ArrayList<One>(1); ones.add(one); Three three = new Three(); three.setOnes(ones); log.info(three); return three; }

generated output without brackets:
{"three":{"ones":
{"first":"previous"}

}}

if multi items in list it's correct:
{"three":{"ones":[
{"first":"previous"}

,
{"first":"next"}

]}}
@GET
@路径(“列表”)
@生成(“应用程序/json”)
公共三分位专家()
{One-One=new-One();One.setFirst(“previous”);List-One=new-ArrayList(1);One.add(1);Three-Three=new-Three();Three.setone(1);log.info(3);return-Three;}
不带括号的生成输出:
{“三”:{“一”:
{“第一”:“先前”}
}}
如果列表中有多个项目,则正确:
{“三”:{“一”:[
{“第一”:“先前”}
,
{“第一个”:“下一个”}
]}}

我使用了基于JAXB的JSON支持我使用了以下更改JSON响应格式的调用

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.Produces;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;

import org.springframework.stereotype.Component;

import com.ws.convertors.EmployeeTimeTrackingConvertor;
import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONJAXBContext;

@Provider
@Component
@SuppressWarnings("unchecked")
@Produces("application/json")
public class JAXBContextResolver implements ContextResolver<JAXBContext>{

    private Class[] types = { EmployeeTimeTrackingConvertor.class};

     private JAXBContext context;
     private final Set<Class> typeSet;

     public JAXBContextResolver() throws Exception {
             this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), types);
             this.typeSet = new HashSet(Arrays.asList(types));
     }

     public JAXBContext getContext(Class<?> objectType) {
             return (typeSet.contains(objectType)) ? context : null;
     }

}
导入java.util.array;
导入java.util.HashSet;
导入java.util.Set;
导入javax.ws.rs.products;
导入javax.ws.rs.ext.ContextResolver;
导入javax.ws.rs.ext.Provider;
导入javax.xml.bind.JAXBContext;
导入org.springframework.stereotype.Component;
导入com.ws.convertors.EmployeeTimeTrackingConvertor;
导入com.sun.jersey.api.json.json配置;
导入com.sun.jersey.api.json.JSONJAXBContext;
@提供者
@组成部分
@抑制警告(“未选中”)
@生成(“应用程序/json”)
公共类JAXBContextResolver实现ContextResolver{
私有类[]类型={EmployeeTimeTrackingConvertor.Class};
私有JAXBContext上下文;
私人最终排版;
公共JAXBContextResolver()引发异常{
this.context=newJSONJAXBContext(JSONConfiguration.natural().build(),类型);
this.typeSet=newhashset(Arrays.asList(types));
}
公共JAXBContext getContext(类objectType){
返回(typeSet.contains(objectType))?上下文:null;
}
}
以及Xml文件中用于bean初始化的配置。

@XmlRootElement(name=“employeeTimeTracking”)
公共类EmployeeTimeTrackingConverter{
私有EmployeeTimeTrackingWrapper EmployeeTimeTrackingWrapper;
私有整数returnCode=null;
私有列表employeeTimeTrackingWrapperList;
私有列表TimeOfHistoryList;
-----setter和getter方法
}
它将自动更改结果

你可以读这个

@XmlRootElement(name = "employeeTimeTracking")
public class EmployeeTimeTrackingConvertor {

    private EmployeeTimeTrackingWrapper employeeTimeTrackingWrapper;
    private Integer returnCode=null;
    private List<EmployeeTimeTrackingWrapper> employeeTimeTrackingWrapperList;
    private List<EmployeeLeaveStatusHistoryNewWrapper> timeOffHistoryList; 
-----setter and getter methods 
}