【问题标题】:jersey 2.4 return JSONObject, not support List,Map to convert to jsonjersey 2.4 返回 JSONObject,不支持 List、Map 转 json
【发布时间】:2013-12-06 09:55:07
【问题描述】:

jersey 2.4 返回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(),我想返回一个数据列表

{ 状态:“好的” 数据:[“测试”,“地图”] }

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

【问题讨论】:

  • 是的,这是 Jersey 集合的默认行为,它在集合元素上使用 toString... 搜索解决方法 jersey 建议处理此问题。
  • 您使用了哪些 JSON 提供程序(MOXy、Jackson、Jettison)?
  • @MichalGajdos 我现在正在使用 MOXy

标签: java json jersey


【解决方案1】:

一种方法是,

创建一个新类。

使用列表数据 = new ArrayList();作为会员。 为该类实现您的 add 方法,以添加到您的 ArrayList。

重写该类的 toString 方法,以返回您想要的列表。

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

【讨论】:

    【解决方案2】:
    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;
    

    导入 java.util.Set;

    导入 javax.ws.rs.ApplicationPath; 导入 javax.ws.rs.core.Application;

    导入 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2022-07-11
      • 1970-01-01
      • 2015-12-19
      相关资源
      最近更新 更多