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 中定义的一种拦截机制,
是对进入到处理器的请求进行拦截.
ac47bc31ca1245ab81c61ce86b8bcbe7.png
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>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双非码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值