携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情
★接收Json参数
也是通过request来获得Json字符串
- Content-Type:application/json
- method:post
- data:Json字符串
如果一个请求,它的请求方法是Post,是否一定携带Json数据?否
如果一个请求,它携带了Json数据,是否一定是Post请求呢?是
如果看到一个请求它的请求方法是Post,要判断是否携带的是Json。携带的字符串的值 里面是否有包含 {}或[]
如果看到一个请求它的请求方法是Get,不用考虑Json
构造Json请求:ajax、axios、Postman
可以这样子接收:都要增加注解@RequestBody
- String → 如果接收为字符串需要你手动转换为引用类型的对象或其他的类型
- 直接使用引用类型的对象或Map接收 → 接收到字符串,由Jackson帮我们自动完成这个转换
// 接收Json数据
@RequestMapping("login")
public BaseRespVo login(@RequestBody String parameter) {
return BaseRespVo.ok(null);
}
@RequestMapping("login2")
public BaseRespVo login2(@RequestBody JsonUser jsonUser) {
return BaseRespVo.ok(null);
}
@RequestMapping("login3")
public BaseRespVo login3(@RequestBody Map map) {
return BaseRespVo.ok(null);
}
我们在开发的时候选择那种方式:
- 引用类型的对象:其他情况使用引用类型的对象; 可以固定(确定)参数的类型
- Map:参数比较少,参数类型比较简单(封装比较简单)
如果参数中有类似于Date格式的字符串,在这里也是可以接收的,取决于Json工具类,而不是Converter,用到 @JsonFormat → jackson提供的 ,也会影响到响应结果中的日期格式
→ 里面有一个属性 pattern:格式信息
→ timezone属性:时区信息
{"username":"songge","password":"niupi","birthday":"1995-03-19"}
这两个URL还是要映射到不同的Handler方法上,通过请求方法做区分
- method属性写的是RequestMethod[] 类型的值,在两个Handler方法上做请求方法的限定
- GetMapping、PostMapping
- Post请求方法携带的是Json数据,形参前要有@RequestBody
/**
* @author stone
* @date 2022/08/08 15:12
*/
@RestController
@RequestMapping("admin/config")
public class ConfigController {
@GetMapping("mall")
public BaseRespVo mall() {
return BaseRespVo.ok(null);
}
@PostMapping("mall")
public BaseRespVo mall2(@RequestBody Map map) {
return BaseRespVo.ok(null);
}
}
其他参数(JavaEE阶段使用的一些参数)
HttpServletRequest和HttpServletResponse
在Handler方法的形参中,也可以使用request和response
@RequestMapping("hello1")
public BaseRespVo hello1(HttpServletRequest request,HttpServletResponse response){
//request和response从哪里来的
}
但是我们通常都不写request和response,因为他们做的事情,基本上SpringMVC都是有封装、
Cookie
要通过request才能够Cookie → request.getCookies
@RequestMapping("cookies")
public BaseRespVo cookies(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
//如果你想要拿到某个name对应的value就要遍历了
for (Cookie cookie : cookies) {
if ("ligenli".equals(cookie.getName())) {
System.out.println("cookieValue:" + cookie.getValue());
}
}
return BaseRespVo.ok(null);
}
构造Cookie
- 浏览器
- Postman
Session
可以通过request.getSession获得Session,也可以直接写在形参上
@RequestMapping("session")
public BaseRespVo session(HttpServletRequest request) {
HttpSession session = request.getSession();
return BaseRespVo.ok(null);
}
@RequestMapping("session2")
public BaseRespVo session2(HttpSession session) {
//HttpSession session = request.getSession();
return BaseRespVo.ok(null);
}