我有一个球衣端点(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。
答案 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进行编码。