jersey 2.4返回JSONObject,不支持List,Map转换为json

时间:2013-12-06 09:55:08

标签: java json jersey

返回JSONObject,不支持List,Map,只能将POJO返回给json

@GET
@Path("/test_map")
@Produces(MediaType.APPLICATION_JSON)
public RestResponse testMap(){
    RestResponse restResponse = new RestResponse();
    List<String> data = new ArrayList<>();
    data.add("test");
    data.add("map");
    restResponse.setData(data);
    restResponse.setStatus(RestResponse.EStatus.OK);
    return restResponse;
}

的回复:

  

{ status: "OK" data: "test map" }

看来泽西调用list.toString(),我想返回一个数据列表

  

{   状态:&#34;好的&#34;   数据:[&#34; test&#34;,&#34; map&#34;]   }

可以在球衣2.4中做到这一点吗?

2 个答案:

答案 0 :(得分:0)

这样做的一种方法是,

创建一个新类。

使用List data = new ArrayList&lt;&gt;();作为会员。 为该类实现add方法,以添加到ArrayList。

覆盖该类的toString方法,以按照您希望的方式返回列表。

在代码中使用该类,而不是ArrayList。

答案 1 :(得分:0)

Use JacksonJsonProvider.class for marshalling and unmarshalling that can be found in jackson-core-asl-1.9.2.jar

just load this class in jersey resource
For example :
import java.util.HashSet;

import java.util.Set;

import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application;

import org.codehaus.jackson.jaxrs.JacksonJsonProvider;

@ApplicationPath("/rest/v1")
public class YourResourceLoader extends Application
{
    /* (non-Javadoc)
     * @see javax.ws.rs.core.Application#getClasses()
     */
    @Override
    public Set<Class<?>> getClasses()
    {
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(JacksonJsonProvider.class);
        return classes;
    }
}