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);
我有一个 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);