我创建了一个示例网络服务来进行邮局调用。
我正在使用Jersey JAX-RS和Maven。
的web.xml
<servlet>
<servlet-name>provider-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.is.ws.provider.rest.ProviderAggregateApplication</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>provider-serlvet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
的pom.xml
<!-- Jersey jars -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
方法调用:
@POST
@Path(RESOURCE_PATH)
@Produces("text/plain")
public String getPCP(){
return "Hello";
}
原始请求:
POST http://localhost:9080/sep/pas/getPCP HTTP/1.1
Connection: close
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length: 69
Host: localhost:9080
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
{
"patientID": "1234567890",
"patientIDType": "XYZ"
}
我参考了以下文章
REST Webservice returning 415 - Unsupported Media Type
但我仍然有问题。
答案 0 :(得分:0)
我删除了pom.xml中的所有依赖项代码,并添加了以下代码,其中包含jersey-core,jersey-bundle,jersey-json
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19</version>
</dependency>
答案 1 :(得分:0)
我遇到了类似的问题,可能是您忘记了Patient类的默认无参数构造函数。
详细地说,我在发送对象时遇到了同样的415
http错误,序列化为JSON,通过对我的JAX-rs服务的PUT / PUSH请求,换句话说,我的服务器无法反序列化来自JSON的对象。
就我而言,服务器能够在将JSON中的相同对象发送到其响应中时成功序列化。
正如其他回复中所述,我已将Accept
和Content-Type
标题正确设置为application/json
,但这还不够。
<强>解决方案强>
我只是忘记了一个没有DTO对象参数的默认构造函数。是的,这与@Entity对象背后的原因相同,您需要一个没有参数的构造函数,以便ORM实例化对象并在以后填充这些字段。
将没有参数的构造函数添加到我的DTO对象解决了我的问题。 这是一个类似于我的代码的例子:
<强>错误强>
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class NumberDTO {
public NumberDTO(Number number) {
this.number = number;
}
private Number number;
public Number getNumber() {
return number;
}
public void setNumber(Number number) {
this.number = number;
}
}
从右强>
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class NumberDTO {
public NumberDTO() {
}
public NumberDTO(Number number) {
this.number = number;
}
private Number number;
public Number getNumber() {
return number;
}
public void setNumber(Number number) {
this.number = number;
}
}
我失去了几个小时,我希望这会拯救你的; - )