【问题标题】:How should I output json from JSONArray using jax rs/jersey? [duplicate]我应该如何使用 jax rs/jersey 从 JSONArray 输出 json? [复制]
【发布时间】:2015-07-04 14:01:01
【问题描述】:

我的restful API方法是这样的

@GET
@Produces(MediaType.APPLICATION_JSON)
public JSONArray getMessage()
{
    FreeDriversService f=new FreeDriversService();
    try {
      return f.executeFreeDrivers(); // this method return a JSONArray
    } 
    catch(Exception e) {
        System.out.println(e.toString());
        return new JSONArray(); 
    }
} 

当我在JSONArray 上使用toString() 方法时,它确实会产生结果,但我希望JSON 作为输出。我该怎么做?

我收到了这个错误

A message body writer for Java class org.json.JSONArray, and Java type class org.json.JSONArray, and MIME media type application/json
was not found

【问题讨论】:

    标签: java json jersey jax-rs


    【解决方案1】:

    问题总结:-

    您在 @Produces 注释中将输出作为 JSON 提到为 @Produces(MediaType.APPLICATION_JSON),但您的方法 getMessage 不是发送 JSONObject,而是返回 JSONArray。 您不能简单地将JSON 转换为JSONArray,因为在JSONArray 中,相同类型的JSONObject 可以用相同的keys 重复多次,可以用多个后面的values 替换JSONObject.

    解决方案:-

    您可以创建一个JSONObject 并将JSONArray 放入其中作为value 用于用户定义的key

           @GET
            @Produces(MediaType.APPLICATION_JSON)
            public Response getMessage(){
            JSONObject finalJson = new  JSONObject ();
            JSONArray inputArray = new JSONArray();
                FreeDriversService f=new FreeDriversService();
                try{
    
                inputArray = f.executeFreeDrivers(); // this method return a JSONArray
                }catch(Exception e){
                    System.out.println(e.toString());
    
                }
                finalJson.put("array",inputArray );
                return Response.status(200).entity(finalJson).build();
                }
    

    【讨论】:

    • getMessage 的返回类型应该是什么? JSONObject 作为返回类型给出相同的错误
    • @NitinJaiman 返回类型应为Response 对象。从 JSONObject 您可以将 Response 对象构造为 Response.status(200).entity(finalJson).build(); 。在上面的代码中也进行了编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2016-08-20
    相关资源
    最近更新 更多