Java 如何始终以数组而不是json形式返回对象?
如果我的结果对象有多个值,则将数组作为json返回。但如果我的结果对象只有一个值,则将对象作为json返回。我不想返回一个对象。我总是想返回一个数组 我的代码如下:Java 如何始终以数组而不是json形式返回对象?,java,json,rest,jersey,Java,Json,Rest,Jersey,如果我的结果对象有多个值,则将数组作为json返回。但如果我的结果对象只有一个值,则将对象作为json返回。我不想返回一个对象。我总是想返回一个数组 我的代码如下: @Service @Path("/item") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Scope("request") public class MyResource { @GET @Path("/
@Service
@Path("/item")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Scope("request")
public class MyResource {
@GET
@Path("/ac")
public List<ACResult> getACResults(@QueryParam("term") String term) {
List<MyResultClass> result = new ArrayList<>();
...
return result;
}
}
@服务
@路径(“/item”)
@产生(MediaType.APPLICATION_JSON)
@使用(MediaType.APPLICATION_JSON)
@范围(“请求”)
公共类MyResource{
@得到
@路径(“/ac”)
公共列表getACResults(@QueryParam(“术语”)字符串术语){
列表结果=新建ArrayList();
...
返回结果;
}
}
我用球衣1.18.3
当存在单个对象时,如何始终将数组而不是对象作为json返回 我的问题解决了。我在我的项目中添加了如下新类:
@Provider
public class JAXBContextResolver implements ContextResolver<JAXBContext> {
private JAXBContext context;
private final Class[] types = {MyResultClass.class};
public JAXBContextResolver() throws Exception {
this.context = new JSONJAXBContext(JSONConfiguration.mapped().arrays("myJsonKey").build(), types);
}
@Override
public JAXBContext getContext(final Class objectType) {
for (Class type : types) {
if (type == objectType) {
return context;
}
}
return null;
}
}
@Provider
公共类JAXBContextResolver实现ContextResolver{
私有JAXBContext上下文;
私有最终类[]类型={MyResultClass.Class};
公共JAXBContextResolver()引发异常{
this.context=newJSONJAXBContext(JSONConfiguration.mapped().arrays(“myJsonKey”).build(),types);
}
@凌驾
公共JAXBContext getContext(最终类objectType){
对于(类类型:类型){
if(type==objectType){
返回上下文;
}
}
返回null;
}
}
参考:或者如果您的接口定义数据作为json数组发送,那么它将始终是json数组,即使它只包含一个元素。从开发的角度来看,在任何情况下都可以简单地依赖返回的数组并检查长度。为什么服务对于单个元素应该有不同的行为?我想我的表达是错误的。我不想返回一个对象。我总是想返回一个数组。我的代码有不同的行为。如果您返回arraylist,它还应该返回json数组。您可以尝试创建一个新的返回类,该类包含您要返回的数组,然后返回该类的对象吗?检查此链接:。它将在“5.2.2.1”节中讨论您的问题。映射符号'。