使用自定义对象接收 json 对 Rest API 的响应

Use custom object to receive json response for Rest API

我已经使用 Jersey 设置了一个 rest API 服务,它会产生 json 响应。这是服务器代码:

@Path("/addNumservice")
public class AddNumService {
    @GET
    @Produces("application/json")
    public Response addNum() throws JSONException {
        JSONObject jsonObject = new JSONObject();
        int x = 5, y = 4;
        int z = x + y; 
        jsonObject.put("Sum Value", z); 

        String result = "@Produces(\"application/json\") Output: \n\nNumber adding Output: \n\n" + jsonObject;
        return Response.status(200).entity(result).build();
    }
}

当我 运行 服务器时,我按预期看到 o/p:

@Produces("application/json") Output: 
Number adding Output: 
{"Sum Value":9}

现在我想设置一个客户端 class 以在我定义的自定义对象 AddNumResponseObject 中接收 json 响应,但是当我这样做时:

AddNumResponseObject object
      = webResource2.accept("application/json").get(AddNumResponseObject.class);

I get this error: A message body reader for Java class com.crunchify.client.AddNumResponseObject, and Java type class com.crunchify.client.AddNumResponseObject, and MIME media type application/json was not found

有人可以帮我吗?

谢谢!

您应该向您的项目添加一个支持 JSON 到 POJO 的提供程序(反之亦然)。现在我假设您使用的是 Jersey 1(由名称 webResource2 推断)。在这种情况下,您应该添加此依赖项

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>${jersey-version}</version>
</dependency>

然后在客户端注册

ClientConfig config = new DefaultClientConfig();
//config.getClasses().add(JacksonJsonProvider.class);
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, 
                                               Boolean.TRUE);
Client c = Client.create(config);

有关服务器配置(如果需要)或 Jersey 2 支持,请参阅 this post. Also see here