Jersey REST 服务不消耗 JSON

Jersey REST service not consuming JSON

我有一个 REST 服务和客户端。我正在尝试调用此服务以直接使用 JSON 并将其转换为我需要的对象。但它不起作用。我收到以下错误: Java class com.a.b.c.D 的消息正文 reader 和 Java 类型 class com.a.b.c.D,未找到 MIME 媒体类型 application/json。

服务:

@Path("/getListPrice")
public class ListPriceService {

      @POST
      @Consumes(MediaType.APPLICATION_JSON)
      @Produces(MediaType.APPLICATION_JSON)
      @Type(PricingObject.class)
      public Response search(PricingObject pricingObject, @Context final HttpHeaders headers) {
              .........
              return Response.ok().entity(pricingObject).build();
      }
}

客户:

WebResource webResource = client.resource(url);               
ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON)
                          .type(MediaType.APPLICATION_JSON_TYPE)
                          .post(ClientResponse.class, pricingObjectRequest);

if (response.getStatus() != 200) {
   throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}

谁能告诉我出了什么问题?

您可以如下修改您的资源class

  /**<code>
     * {
     * "id"=1,
     * "name="priceitem1"
     * }
     * </code>

    **/
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response search(PricingObject pricingObject) {
        JSONArray jsarray=new JSONArray();
        jsarray.put(pricingObject);
        return Response.ok().entity(jsarray.toString()).build();
    }

标签之间的数据是来自客户端的 json 数据。</p> <p>您可以按如下方式配置您的 bean class </p> <pre>public class PricingObject { @XmlElement(name="id") private int id; @XmlElement(name="name") private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }

}

@xmlelement 会将 json 键与您的 bean class 变量绑定。

您需要配置 Jersey 以使用句柄 Json -> 对象映射。对于 Jersey 1,您需要将 json 提供程序添加到您的依赖项中,例如

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.17.1</version>
</dependency>

A message body reader for Java class com.a.b.c.D, and Java type class com.a.b.c.D, and MIME media type application/json was not found

你没有说你得到的是服务器端异常还是客户端异常。如果是前者,您要么没有 JSON 的提供程序,要么有一个但尚未配置它。

这是供应商

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

这里是web.xml配置

<init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>

如果是客户端异常,我会假设您有上述依赖关系。然后用客户端配置就可以了

ClientConfig config = new DefaultClientConfig();
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
Client client = Client.create(config);