我有一个使用泽西岛的JAX-RS REST服务。我使用JAXB进行JSON编组(即。@XmlRootElement) 其中一种方法返回JPA持久化的对象列表。泽西岛对空列表的响应为空而不是{}
当此列表包含条目时,它的工作方式与我的预期相同。例如:
{"androidDevice":[{"email":"[email protected]","timeCreated":"2012-10-19T
22:41:26.862+02:00"},{"email":"[email protected]","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;
}
}
你是如何编组内容给JSON的?泽西只是信使,它被告知发送空。 – smcg
使用JAXB(@XmlRootElement) – dparnas