我应该如何 return JSON 在 Jersey 2 中回应

How should I return JSON response in Jersey 2

我在尝试 return 响应 Jersey 2 中的 JSON 对象时遇到问题。

以下是代码片段:

        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,因为我只想 return a json 对象。

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

JSONObject 获取 String 并在 Response 中设置 String。如下所示 -

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