【问题标题】:javax.ws.rs MediaType - Accept Headerjavax.ws.rs MediaType - 接受标头
【发布时间】:2016-04-11 02:55:56
【问题描述】:

@Consumes@Produces 都接受媒体类型。请求中的Accept Header对应哪个注解?

在大多数示例(例如How to deal with accept-parameters when developing a jax-rs application)中,它显示了使用@Produces 来接受来自客户端请求的标头。

【问题讨论】:

    标签: rest jax-rs mime-types media-type javax.ws.rs


    【解决方案1】:

    @Consumes 用于请求类型,即客户端发送的类型,即Content-Type。例如

    @Consumes("application/json")
    ...
    > POST / HTTP/1.1
    > Content-Type: application/json
    { "json": "data" }
    
    < 200 OK
    
    @Consumes("application/json")
    ...
    > POST / HTTP/1.1
    > Content-Type: application/xml
    <xml><data></data></xml>
    
    > 415 Unsupported Media Type
    

    这里有两个示例请求。在服务器上,两者都用@Consumes("application/json") 注释。这意味着它只能处理以 JSON 格式发送的数据。第一个请求,客户端用正确的Content-Type 发送数据,所以它得到一个OK 响应。第二个请求,它发送带有 Content-Type 不支持的 XML 数据,所以它得到一个 415。

    @Produces 用于服务器发送的数据类型。客户端还可以添加一个Accept 标头来说明它可以接受(或处理)什么类型。如果@Produces 中未指定该类型,则服务器无法处理该类型,并且客户端会收到错误消息。例如

    @Produces("application/json")
    ...
    > GET / HTTP/1.1
    > Accept: application/json
    
    < 200 OK
    { "json" : "data" }
    
    
    @Produces("application/json")
    ...
    > GET / HTTP/1.1
    > Accept: application/xml
    
    < 406 Not Acceptable
    

    【讨论】:

      猜你喜欢
      • 2019-05-10
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 2018-06-24
      相关资源
      最近更新 更多