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

时间:2017-11-02 05:52:57

标签: jersey jax-rs media-type http-status-code-415

我有一个球衣端点(JAX-RS),我试图用text / xml req命中。我回来了一个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”}

我的POST主体肯定是格式良好的xml。

1 个答案:

答案 0 :(得分:1)

您收到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进行编码。