0


web入门-HTTP协议及请求参数和统一响应格式

Web入门

1.HTTP-请求数据格式

1.1请求行

  • 请求数据第一行(请求方式,资源路径,协议)

1.2请求头

  • 第二行开始,格式key:valueHost:请求得主机名User-Agent:浏览器版本,例如chrome浏览器得标识Mozilla/5.0 …Chrome/79,IE浏览器的标识类似Mozilla/5.0(WindowsNT…)like GeckoAccept:表示浏览器能接收的资源类型,如text/*,image/或者/*表示所有;Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip,deflate等。Content-Type:请求主体的数据类型Content-Length:请求主题的大小(单位:字节)。

1.3请求体

  • 请求方式-GET:请求参数在请求行中,没有请求体,如:/brand/findAll?name=OPPO$status=1。GET请求大小是有限制的。
  • 请求方式-POST:请求参数在请求体中,POST请求大小是没有限制的。

2.HTTP-响应格式

2.1响应行

  • 响应数据第一行(协议,状态码,描述)- 状态码大类:​ 1xx:响应中-临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它。​ 2xx:成功-表示请求已经被成功接收,处理已完成。​ 3xx:重定向-重定向到其他地方;让客户端再发起一次请求以完成整个处理。​ 4xx:客户端错误-处理发生错误,责任在客户端。如:请求了不存在的资源,客户端未被授权,禁止访问等。​ 5xx:服务端错误-处理发生错误,责任在服务端。如:程序抛出异常。- 常见状态码状态码英文描述解释200**OK客户端请求成功,即处理成功,这是我们最想看到的状态码302Found指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面304Not Modified告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向400Bad Request客户端请求有语法错误,不能被服务器所理解403Forbidden服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源404Not Found*请求资源不存在,一般是URL输入有误,或者网站资源被删除了405*Method Not Allowed请求方式有误,比如应该用GET请求方式的资源,用了POST428Precondition Required*服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头429*Too Many Requests指示用户在给定时间内发送了太多请求(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用431 Request Header Fields Too Large*请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。500*Internal Server Error*服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧503*Service Unavailable**服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好状态码大全:https://cloud.tencent.com/developer/chapter/13553

2.2响应头

  • 第二行开始,格式key:value​ Content-type:表示该响应内容的类型,例如text/html,application/json。​ Content-Length:表示该响应内容的长度(字节数)​ Content-Encoding:表示该响应压缩算法,例如gzip。​ Cache-Control:表示客户端应如何缓存,例如max-age=300表示最多可以缓存300秒。​ Set-Cookie:告诉浏览器为当前页面所在的域设置cookie。

2.3响应体

  • 最后一部分,存放响应数据

3.请求参数及请求格式

3.1概述

  • 请求:(HttpServletRequest):获取请求数据
  • 响应:(HttpServletResponse):设置响应数据
  • BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器。
  • CS架构:Client/Server,客户端/服务器

3.2简单参数

  1. 原始方式获取请求参数 - Controller方法形参中声明HttpServletRequest对象- 调用对象的getParameter(参数名)
  2. SpringBoot中接收简单参数 - 请求参数名与方法形参变量名相同- 会自动进行类型转换
  3. @RequestParam注解 - 方法形参名称与请求参数名不匹配,通过该注解完成映射- 该注解的required属性默认是true,代表请求参数必须传递
  • 原始方式//原始方式@RequestMapping("/simpleParam")publicStringsimpleParam(HttpServletRequest request){String name = request.getParameter("name");String ageStr = request.getParameter("age");int age =Integer.parseInt(ageStr);System.out.println(name +":"+ age);return"ok";}
  • springboot方式- 参数名与形参变量相同,定义形参即可接受参数//springboot方式@RequestMapping("/simpleParam")publicStringsimpleParam(String name ,Integer age){System.out.println(name +":"+ age);return"ok";}- 如果方法形参名称与请求参数名称不匹配,可以使用@RequestParam完成映射。//springboot方式@RequestMapping("/simpleParam")publicStringsimpleParam(@RequestParam(name ="name")String username ,Integer age){System.out.println(username +":"+ age);return"ok";}- @RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果参数是可选的,可以将required属性设置为false//springboot方式@RequestMapping("/simpleParam")publicStringsimpleParam(@RequestParam(name ="name",required =false)String username ,Integer age){System.out.println(username +":"+ age);return"ok";}

3.3简单实体参数

在这里插入图片描述

//简单实体参数@RequestMapping("/simplePojo")publicStringsimplePojo(User user){System.out.println(user);System.out.println(user.getName()+":"+ user.getAge());return"ok";}
packagecom.itheima.springbootwebquickstart.pojo;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;/**
 * ClassName: User
 * Package: com.itheima.springbootwebquickstart.pojo
 * Description:
 * <p>
 * {@code @Author} 段
 * {@code @Create} 2024/5/13 10:58
 * {@code @Version} 1.0
 */@Data@AllArgsConstructor@NoArgsConstructorpublicclassUser{privateString name;privateInteger age;}

3.4复杂实体参数

在这里插入图片描述

package com.itheima.springbootwebquickstart.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * ClassName: User
 * Package: com.itheima.springbootwebquickstart.pojo
 * Description:
 * <p>
 * {@code @Author} 段
 * {@code @Create} 2024/5/13 10:58
 * {@code @Version} 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private Integer age;
    private Address address;
}
packagecom.itheima.springbootwebquickstart.pojo;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;/**
 * ClassName: Address
 * Package: com.itheima.springbootwebquickstart.pojo
 * Description:
 * <p>
 * {@code @Author} 段
 * {@code @Create} 2024/5/13 11:05
 * {@code @Version} 1.0
 */@Data@AllArgsConstructor@NoArgsConstructorpublicclassAddress{privateString province;privateString city;}
//复杂实体参数@RequestMapping("/complexPojo")publicStringcomplexPojo(User user){System.out.println(user);System.out.println(user.getName()+":"+ user.getAge()+":"+ user.getAddress().getProvince()+":"+ user.getAddress().getCity());return"ok";}

注:

@Data:该注解是lombok插件提供的,作用是生成标注类的所有get/ser方法

@AllArgsConstructor:该注解是lombok插件提供的,作用是生成标注类的所有带参构造

@NoArgsConstructor:该注解是lombok插件提供的,作用是生成标注类的空参构造

3.5数组集合参数

3.5.1数组参数

在这里插入图片描述

//数组集合参数@RequestMapping("/arrayParam")publicStringarrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return"ok";}
3.5.2集合参数
  • 集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系

在这里插入图片描述

//集合参数@RequestMapping("/listParam")publicStringlistParam(@RequestParamList<String> hobby){System.out.println(hobby);return"ok";}

3.6日期参数

  • 日期参数:使用@DateFormat注解完成日期参数格式转换(该注解用于指定前端传递的参数格式)

在这里插入图片描述

//日期参数@RequestMapping("/dateParam")publicStringdateParam(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime){System.out.println(updateTime);return"ok";}

3.7Json参数

  • JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识(该注解将JSON格式的参数封装到对应的实体类中)

在这里插入图片描述

//json格式参数@PostMapping("/jsonParam")//注意,JSON参数是存放在请求体当中的,此时应使用Post请求方式publicStringjsonParam(@RequestBodyUser user){System.out.println(user);return"ok";}

3.8路径参数

  • 路径参数:通过请求url直接传递参数,使用{…}来标识该路径参数,需要使用@PathVariable获取路径参数并将该路径参数绑定给形参(路径参数名称应和形参名称一致)
3.8.1单个路径参数

在这里插入图片描述

//路径参数@RequestMapping("/pathParam/{id}")publicStringpathParam(@PathVariableInteger id){System.out.println(id);return"ok";}
3.8.2多个路径参数

在这里插入图片描述

//多个个路径参数@RequestMapping("/pathParam/{id}/{name}")publicStringpathParam2(@PathVariableInteger id,@PathVariableString name){System.out.println(name +":"+ id);return"ok";}

4.响应数据及响应格式

​ @ResponseBody

  • 类型:方法注解,类注解
  • 位置:Controller方法上/类上
  • 作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为JSON格式响应
  • 说明:@RestController = @Controller + @ResponseBody;

统一响应结果

packagecom.itheima.springbootwebquickstart.pojo;/**
 * ClassName: Result
 * Package: com.itheima.springbootwebquickstart.pojo
 * Description:统一响应结果封装类
 * <p>
 * {@code @Author} 段
 * {@code @Create} 2024/5/13 15:45
 * {@code @Version} 1.0
 */publicclassResult{privateInteger code;//1 成功 , 0 失败privateString msg;//提示信息privateObject data;//数据 datapublicResult(){}publicResult(Integer code,String msg,Object data){this.code = code;this.msg = msg;this.data = data;}publicIntegergetCode(){return code;}publicvoidsetCode(Integer code){this.code = code;}publicStringgetMsg(){return msg;}publicvoidsetMsg(String msg){this.msg = msg;}publicObjectgetData(){return data;}publicvoidsetData(Object data){this.data = data;}publicstaticResultsuccess(Object data){returnnewResult(1,"success",data);}publicstaticResultsuccess(){returnnewResult(1,"success",null);}publicstaticResulterror(String msg){returnnewResult(1,msg,null);}@OverridepublicStringtoString(){return"Result{"+"code="+ code +", msg='"+ msg +'\''+", data="+ data +'}';}}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_58216887/article/details/138807952
版权归原作者 文化人大队长 所有, 如有侵权,请联系我们删除。

“web入门-HTTP协议及请求参数和统一响应格式”的评论:

还没有评论