我应该如何使用jax rs / jersey从JSONArray输出json?

时间:2015-07-04 14:01:01

标签: java json jersey jax-rs

我的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(); 
    }
} 

当我在toString()上使用JSONArray方法时,它会生成结果,但我希望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

1 个答案:

答案 0 :(得分:1)

问题摘要: -

您在JSON注释中将@Produces的输出称为@Produces(MediaType.APPLICATION_JSON),但您的方法JSONObject不是发送getMessage而是返回JSONArray }。 您无法简单地将JSON转换为JSONArray,因为在JSONArrayJSONObject相同类型的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(); } 放入其中,用于定义用户{{1}}。

{{1}}