我应该如何在Jersey 2中返回JSON响应

时间:2017-01-11 11:54:55

标签: jersey-2.0

我在尝试使用Jersey 2中的JSON对象返回Response时遇到问题。

以下是代码段:

        import javax.ws.rs.GET;
        import javax.ws.rs.Path;
        import javax.ws.rs.Produces;
        import javax.ws.rs.core.MediaType;
        import javax.ws.rs.core.Response;
        import javax.ws.rs.core.Response.Status;
        import org.codehaus.jettison.json.JSONObject;

        @Path("/message")
        public class HelloWorld {

          @Path("/getJson")
          @GET
          @Produces(MediaType.APPLICATION_JSON)
          public Response getJSON() {
            JSONObject object = null;
            Response response = null;
            try {
              object = new JSONObject();
              object.put("Name", "Bryan");
              object.put("Age", "27");
              response = Response.status(Status.OK).entity(object).build();
            } catch (Exception e) {
              System.out.println("error=" + e.getMessage());
            }
            return response;
          }
        }

我得到以下异常:

 No serializer found for class org.codehaus.jettison.json.JSONObject and no  properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)

相关帖子建议我尝试以下方法。

  1. 使用ObjectMapper并设置属性 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false); :我不需要在这种情况下使用ObjectMapper,因为我只想返回一个json对象。

  2. 尝试POJO而不是JSON对象: 是的POJO工作正常,但这不是我想要的。我需要返回带有Json对象的Response,它将由我的Java脚本代码解析。

1 个答案:

答案 0 :(得分:6)

String获取JSONObject并在String中设置Response。像下面的东西 -

 object = new JSONObject();
 object.put("Name", "Bryan");
 object.put("Age", "27");
 response = Response.status(Status.OK).entity(object.toString()).build();