首页 > 其他分享 >数据响应、内容协商

数据响应、内容协商

时间:2023-02-24 20:14:12浏览次数:60  
标签:xml 返回 请求 协商 响应 内容 类型 返回值 客户端

数据相应

  • 响应页面:发送一个请求,跳转到目标页面,单体项目,发送请求直接跳转
  • 响应数据:前后分离项目;比如做一个后台只接收请求,给前端响应图片、音频、视频、文档等

响应JSON

  • 1.想要springmvc快速返回一个JSON数据,必须在pom文件中引入starter-web场景,web场景中引入了JSON场景,相关处理依赖
    @ResponseBody


    给前端自动返回JSON数据
  • 2.返回值解析器
    处理各种返回值
    • 1.返回值处理器判断是否支持这种类型返回值supportsReturnType
    • 2.返回值处理器调用handleReturnValue进行处理
  • SpringMvc所支持的返回值
    1 ModelAndView
    2 Model
    3 View
    4 ResponseEntity
    5 ResponseBodyEmitter
    6 StreamingResponseBody
    7 HttpEntity
    8 HttpHeaders
    9 Callable
    10 DeferredResult
    11 ListenableFuture
    12 CompletionStage
    13 WebAsyncTask
    14 有 @ModelAttribute
    15 @ResponseBody 注解 ---> RequestResponseBodyMethodProcessor

内容协商

根据客户端接收能力不同,返回不同类型的数据;在不同的情况下返回不同的内容
Accept请求头就是告诉服务器,接收方能接受什么样的数据;并且这个数据是有优先级的。

  • 1.引入xml文件
  • 2.postman分别测试返回json和xml
    只需要改变请求头的Accpet字段。Http协议中规定的,,告诉服务器本客户端可以接收的数据类型。("application/json"/"application/xml")
  • 3.开启浏览器内容协商功能
    为了方便内容协商,可以开启基于请求参数的内容协商功能。
    请求头是没有办法改的,并且其中的类型有权重;想要实现不同类型之间的转换,需要进行如下操作:
    在.yml配置文件当中,配置“内容协商配置”,默认是false,手动设置为true;开启参数方式的内容写上

    设置以后,比如需要返回.xml类型,那就将需要的类型名放到路径上

    在访问路径上携带format参数,来制定返回值的类型是json还是xml,所以发送请求方式就如上所示
  • 原理:就是将底层所有Converter统计出来,找到最佳匹配,用支持最佳匹配类型的Converter,然后调用其进行数据转换
    1.判断当前响应头中是否已经有确定的媒体类型。MedliaType
    2.获取客户端(PostMan、浏览器)支持接收的内容类型。(获取客户端Accpet请求字段)【application/json】
    3.遍历所有当前系统的MessageConverter,寻找出支持返回对象的Converter
    4.baconverter支持的媒体类型统计出来
    5.如,客户端需要【application/xml】。服务端能力【10种】
    6.通过双层for循环匹配服务器、客户端都支持的数据类型,而后返回对应类型数据

自定义

  • 1.当浏览器发送请求,希望是返回xml类型
  • 2.当ajax请求就返回json
  • 3.如果是硅谷发送请求,就返回自定义协议数据

步骤:
1.添加自定义的MessageConverter进系统底层
2.系统底层就会统计出所有MessageConverter能操作哪些类型
3.客户端内容协商

标签:xml,返回,请求,协商,响应,内容,类型,返回值,客户端
From: https://www.cnblogs.com/hezhipeng/p/17003139.html

相关文章