0

我有一个球衣端点(JAX-RS),我正在尝试使用文本/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"}

我的 POST 正文绝对是格式良好的 xml。

4

1 回答 1

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) {
    ...
}

whereMyRequest声明如下:

@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。

于 2017-11-02T13:01:58.763 回答