springweb获取请求数据、spring中拦截器
SpringWeb获取请求数据
springWeb支持多种类型的请求参数进行封装
1、使用HttpServletRequest对象接收
@PostMapping(path = "/login")//post请求
//spring自动注入
public String login(HttpServletRequest request){
System.out.println(request.getParameter("account"));
return "success";
}
2、spring自动封装,
@PostMapping(path = "/login")//post请求
public String login(String account,String password){
return "success";
}
3、前端请求参数需要后端形参名一致Spring 会自定进行数据封装,如果不一致需要使用@RequestParam进行参数绑定,@RequestHeader用来接收请求头中的数据
/*@PostMapping(path = "/login")//post请求
//spring自动注入
//前后端参数名称一致是@RequestParam进行绑定,请求体用@RequestHeader
public String login(@RequestParam("account1") String account, Integer password, @RequestHeader String token){
System.out.println("登录");
return "success";
}*/
4、使用实体类接收数据
@RequestBody可以接收前端响应的json格式的数据封装到对象里
@PostMapping(path = "/login")//post请求
public Result login(@RequestBody Admin admin, @RequestHeader String token){
Admin admin1= loginService.login(admin);
Result result=new Result(200,"登录成功",admin1);
return result;
}
需要添加json组件
<!--jackson--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.14.2</version> </dependency>
5、日期转换类型
@DateTimeFormat(pattern = "yyyy-MM-dd")//接收前端数据提交发送的日期格式 @JsonFormat(pattern = "yyyy-MM-dd")//向前端响应转json时i使用的 private Date birthday;
拦截器
Spring WEB 中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter),
它主要用于拦截用户请求并作相应的处理。
Spring 中的拦截器与过滤器有着本质的区别,过滤器是 servlet 规范中定义并实
现的,在进入到 servlet 之前截获请求.而拦截器是 spring 中定义的一种拦截机制,
是对进入到处理器的请求进行拦截.
SpringWEB 定义了拦截器接口 HandlerInterceptor
调用这个三个方法的时候,其参数的值也是从框架内部传递进来的。
boolean preHandle
预处理方法,实现处理器方法的预处理,就是在处理器方法执行之前这个方法会
被执行,相当于拦截了处理器方法,框架会传递请求和响应对象给该方法,第三
个参数为被拦截的处理器。如果 preHandle 方法返回 true 表示继续流程(如调
用下一个拦截器或处理器方法),返回 false 表示流程中断,不会继续调用其他
的拦截器或处理器方法,此时我们需要通过 response 来产生响应;
拦截器的实现
编写一个类继承HandlerInterceptorAdapter
package com.ffyc.ssm.interceptor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ffyc.ssm.model.Result;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AdminTokenInterceptor implements HandlerInterceptor {
/*
实现HandlerInterceptor接口,重写preHandle
* 拦截器处理方法,当请求到达处理器前,进入拦截器处理
* 返回true离开拦截器向后执行到达处理器Controller
* 返回false不在向后执行*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String adminToken=request.getHeader("adminToken");
if (adminToken.equals("1234567")){
return true;
}else {
Result result=new Result(401,"token验证失败",null);
response.getWriter().write(new ObjectMapper().writeValueAsString(result));
}
return false;
}
}
注册拦截器,在spring.xml中
<!-- 配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/><!--定义进去拦截器的地址-->
<mvc:exclude-mapping path="/loginCtl/login"/><!--定义不进去拦截器的地址-->
<bean id="admintoken" class="com.ffyc.ssm.interceptor.AdminTokenInterceptor"></bean><!---->
</mvc:interceptor>
</mvc:interceptors>