我有使用新泽西州JAX-RS REST服务。 我使用JAXB的JSON编组(即@XmlRootElement)的方法的一个返回坚持用JPA对象的列表。
当这个列表中包含的条目它可以作为我的期望。 例:
{"androidDevice":[{"email":"dagfinn.parnas@d2.no","timeCreated":"2012-10-19T
22:41:26.862+02:00"},{"email":"dagfinn.parnas@d1.com","timeCreated":"2012-10-
19T22:41:38.093+02:00"}]}
但是,如果列表为空(或空),我希望它返回{}。
相反,它返回null。 例:
$ curl -i -H "Accept: application/json" http://....
HTTP/1.1 200 OK
Content-Type: application/json
null
下面是代码
@GET
@Produces( { MediaType.APPLICATION_JSON , MediaType.APPLICATION_XML})
public List<AndroidDevice> getAndroidDevices() {
logger.info("getAndroidDevices method called");
EntityManager entityManager = entityMangerFactory.createEntityManager();
List<AndroidDevice> resultList = entityManager.createNamedQuery(AndroidDevice.QUERY_ALL_ENTRIES,
AndroidDevice.class).getResultList();
//avoid returning content null. (doesn't work)
if(resultList==null){
resultList=new ArrayList<AndroidDevice>();
}
return resultList;
}
有没有什么办法让泽西岛返回一个空的JSON列表(除了硬编码一个ResponseBuilder)?
我应该代替提供这样的事件不同的响应代码?
更新:得到通过Twitter有关此错误的报告,该报告与总结他们不会修复它提示http://java.net/jira/browse/JERSEY-339
UPDATE2:除了下面的解决方案,因为我使用用于配置的应用(refered web.xml中),我不得不手动添加Provider类那里。 下面是相关的代码。
public class JAXRSApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> set = new HashSet<Class<?>>();
//Add all endpoints to this set
set.add(AndroidDeviceEndpoint.class);
//Add Providers
set.add(JAXBContextResolver.class);
return set;
}
}