【问题标题】:getting http 415, Unsupported Media Type using text/xml使用 text/xml 获取 http 415,不支持的媒体类型
【发布时间】:2017-11-02 05:52:56
【问题描述】:

我有一个 jersey 端点 (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。

【问题讨论】:

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


    【解决方案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。

    【讨论】:

    • 顺便说一句,不是Application/xml吗?
    猜你喜欢
    • 2017-07-05
    • 2015-08-29
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多