zoukankan      html  css  js  c++  java
  • springMVC produces属性含义

    @RequestMapping(value = "/produces", produces = "application/json"):表示将功能处理方法将生产json格式的数据,此时根据请求头中的Accept进行匹配,如请求头“Accept:application/json”时即可匹配;

    @RequestMapping(value = "/produces", produces = "application/xml"):表示将功能处理方法将生产xml格式的数据,此时根据请求头中的Accept进行匹配,如请求头“Accept:application/xml”时即可匹配。

    此种方式相对使用@RequestMapping的“headers = "Accept=application/json"”更能表明你的目的。

    服务器控制器代码详解cn.javass.chapter6.web.controller.consumesproduces.ProducesController;

    客户端代码类似于之前的Content-Type中的客户端,详见ProducesController.java代码。

    当你有如下Accept头:

    ①Accept:text/html,application/xml,application/json

          将按照如下顺序进行produces的匹配 ①text/html ②application/xml ③application/json

    ②Accept:application/xml;q=0.5,application/json;q=0.9,text/html

          将按照如下顺序进行produces的匹配 ①text/html ②application/json ③application/xml

          q参数为媒体类型的质量因子,越大则优先权越高(从0到1)

    ③Accept:*/*,text/*,text/html

          将按照如下顺序进行produces的匹配 ①text/html ②text/* ③*/*

     

    即匹配规则为:最明确的优先匹配。

    代码详见ProducesPrecedenceController1、ProducesPrecedenceController2、ProducesPrecedenceController3。

    Accept详细信息,请参考http://tools.ietf.org/html/rfc2616#section-14.1

    三、窄化时是覆盖 而 非继承

    如类级别的映射为 @RequestMapping(value="/narrow", produces="text/html"),方法级别的为@RequestMapping(produces="application/xml"),此时方法级别的映射将覆盖类级别的,因此请求头“Accept:application/xml”是成功的,而“text/html”将报406错误码,表示不支持的请求媒体类型。

    详见cn.javass.chapter6.web.controller.consumesproduces.NarrowController。

    只有生产者/消费者 模式 是 覆盖,其他的使用方法是继承,如headers、params等都是继承。

    四、组合使用是“或”的关系

    @RequestMapping(produces={"text/html", "application/json"}) :将匹配“Accept:text/html”或“Accept:application/json”。

    五、问题

    消费的数据,如JSON数据、XML数据都是由我们读取请求的InputStream并根据需要自己转换为相应的模型数据,比较麻烦;

    生产的数据,如JSON数据、XML数据都是由我们自己先把模型数据转换为json/xml等数据,然后输出响应流,也是比较麻烦的。

    Spring提供了一组注解(@RequestBody、@ResponseBody)和一组转换类(HttpMessageConverter)来完成我们遇到的问题,详见6.6.8节。

     

    https://blog.csdn.net/lzwglory/article/details/17252099

  • 相关阅读:
    POJ 1401 Factorial
    POJ 2407 Relatives(欧拉函数)
    POJ 1730 Perfect Pth Powers(唯一分解定理)
    POJ 2262 Goldbach's Conjecture(Eratosthenes筛法)
    POJ 2551 Ones
    POJ 1163 The Triangle
    POJ 3356 AGTC
    POJ 2192 Zipper
    POJ 1080 Human Gene Functions
    POJ 1159 Palindrome(最长公共子序列)
  • 原文地址:https://www.cnblogs.com/feng9exe/p/12120159.html
Copyright © 2011-2022 走看看