使用 text/xml 获取 http 415,不支持的媒体类型

getting http 415, Unsupported Media Type using text/xml

我有一个球衣端点 (JAX-RS),我正试图用 text/xml 请求访问它。我收到了一个 http 415,但我不明白为什么。这是信息。有任何想法吗?谢谢

@Path("/bid")
@Produces("text/xml;charset=ISO-8859-1")
@Consumes({"text/xml", "application/xml"})
@Resource
public class BidController {

@RolesAllowed("blah")
@POST
public Response bid(final HttpServletRequest request) {

我正在通过 Postman(REST 客户端)发送 {"Content-Type":"text/xml"}

我的POSTbody绝对是格式正确的xml。

您收到 415 响应,因为 JAX-RS 不知道如何将传入的 XML 转换为 HttpServletRequest

如果你真的想要访问请求,那么你需要用@javax.ws.rs.core.Context注释:

@RolesAllowed("blah")
@POST
public Response bid(@Context final HttpServletRequest request) {

然而,正如您所说,您正在用 text/xml 击中它,那么您可能实际上想要:

@POST
public Response bid(final MyRequest request) {
    ...
}

其中 MyRequest 声明如下:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyRequest {

     @XmlElement
     int field1;

     @XmlElement
     String field2;

     ...
}

对应 XML 如:

<MyRequest>
    <field1>11327</field1>
    <field2>some string
</MyRequest>

JAX-RS 规范要求实现能够解码传入 text/xml 并通过 JAXB 编码传出 text/xml。