@produces在spring mvc中是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@produces在spring mvc中是啥意思相关的知识,希望对你有一定的参考价值。

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

三、窄化时是覆盖 而 非继承
如类级别的映射为 @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等数据,然后输出响应流,也是比较麻烦的。
参考技术A 注解@Produces用于定义方法的响应实体的数据类型,可以定义一个或多个
http://book.51cto.com/art/201701/529132.htm

“**”在python中是啥意思? [复制]

【中文标题】“**”在python中是啥意思? [复制]【英文标题】:What does "**" mean in python? [duplicate]“**”在python中是什么意思? [复制] 【发布时间】:2011-12-23 02:43:07 【问题描述】:

可能重复:What does ** and * do for python parameters?What does *args and **kwargs mean?

简单程序:

storyFormat = """                                       
Once upon a time, deep in an ancient jungle,
there lived a animal.  This animal
liked to eat food, but the jungle had
very little food to offer.  One day, an
explorer found the animal and discovered
it liked food.  The explorer took the
animal back to city, where it could
eat as much food as it wanted.  However,
the animal became homesick, so the
explorer brought it back to the jungle,
leaving a large supply of food.

The End
"""                                                 

def tellStory():                                     
    userPicks = dict()                              
    addPick('animal', userPicks)            
    addPick('food', userPicks)            
    addPick('city', userPicks)            
    story = storyFormat.format(**userPicks)
    print(story)

def addPick(cue, dictionary):
    '''Prompt for a user response using the cue string,
    and place the cue-response pair in the dictionary.
    '''
    prompt = 'Enter an example for ' + cue + ': '
    response = input(prompt).strip() # 3.2 Windows bug fix
    dictionary[cue] = response                                                             

tellStory()                                         
input("Press Enter to end the program.")     

关注这一行:

    story = storyFormat.format(**userPicks)

** 是什么意思?为什么不直接传递一个普通的userPicks

【问题讨论】:

【参考方案1】:

** 表示 kwargs。这是一篇关于它的好文章。 阅读:http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/

【讨论】:

【参考方案2】:

'**' 接受一个字典并提取其内容并将它们作为参数传递给函数。以这个函数为例:

def func(a=1, b=2, c=3):
   print a
   print b
   print b

现在通常你可以这样调用这个函数:

func(1, 2, 3)

但您也可以使用存储的这些参数来填充字典,如下所示:

params = 'a': 2, 'b': 3, 'c': 4

现在您可以将其传递给函数:

func(**params)

有时您会在函数定义中看到这种格式:

def func(*args, **kwargs):
   ...

*args 提取位置参数,**kwargs 提取关键字参数。

【讨论】:

那么,它可以用字典键映射回参数,对吗?这个功能/特性叫什么?我发现它非常有趣且功能强大,这仅适用于 python 吗? @DNB5brims,我相信这被称为“解构”。它正在进入其他语言,例如 Javascript (ECMAScript 2015)。 注意paramsdict的键值必须与func定义中列出的可选参数的名称匹配,否则会出现TypeError

以上是关于@produces在spring mvc中是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc 是啥

求大神解释解释MVC与SpringMVC是啥,

springmvc 没有produces注释

struts是啥意思?

“?”是啥意思?在 Erlang 中是啥意思? [复制]

“||”是啥意思在 var 语句中是啥意思? [复制]