HTTP 415不支持的媒体类型
我创建了一个示例Web服务来进行调用。
我正在使用Jersey JAX-RS和Maven。
web.xml中
provider-serlvet com.sun.jersey.spi.container.servlet.ServletContainer javax.ws.rs.Application org.is.ws.provider.rest.ProviderAggregateApplication com.sun.jersey.api.json.POJOMappingFeature true 1 provider-serlvet /*
的pom.xml
com.sun.jersey jersey-client 1.19 com.sun.jersey jersey-core 1.19 com.sun.jersey jersey-server 1.19 com.sun.jersey jersey-servlet 1.19 com.sun.jersey jersey-json 1.18 org.codehaus.jackson jackson-mapper-asl 1.9.13
方法调用:
@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返回415 – 不支持的媒体类型
但我仍然有问题。
我删除了pom.xml中的所有依赖项代码,并添加了以下代码,其中包含jersey-core,jersey-bundle,jersey-json
com.sun.jersey jersey-bundle 1.19 com.sun.jersey jersey-json 1.19 com.sun.jersey jersey-core 1.19
我遇到了类似的问题,你可能忘记了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; } }
我失去了几个小时,我希望这会拯救你的;-)