在controller之前执行某些操作

创建BaseController 其他Controller继承它

1.在每次进controller时使用 @ModelAttribute 可以在controller之前执行方法
比如用户验证操作

	/**
	 * 每次访问controller都执行
	 * @Title: show  
	 * @param request
	 * @return void
	 * @throws
	 */
	@ModelAttribute
	public void show(HttpServletRequest request, HttpServletResponse response,String jurisdiction) throws Exception {

		if (jurisdiction != null && jurisdiction.equals("1")) {
				
		} else {
			// 获取Session对象
			HttpSession session = request.getSession();
			if (session.getAttribute("user") == null) {
				response.sendRedirect("/");
				return;
			}
		}

	

2.将前台传递过来的日期格式的字符串,自动转化为Date类型
@InitBinder 是该匹配Controller的请求执行映射的方法之前
webDataBinder是用于表单到方法的数据绑定的

/**
	 * 将前台传递过来的日期格式的字符串,自动转化为Date类型
	 */
	@InitBinder
	public void initBinder(WebDataBinder binder) {
		// Date 类型转换
		binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
			@Override
			public void setAsText(String text) {
				setValue(DateUtils.parseDate(text));
			}
		});
	}
	```

测试验证:  

第一次验证

测试@ModelAttribute  全局运行 

直接获取全局loginVo

    /**
     * 直接获取全局loginVo
     */   
    @PostMapping("login")
    public ApiResponse login( LoginVo loginVo){
      String token = yzUserService.login(loginVo.getUsername(),loginVo.getPassword());
        return  ApiResponse.success(token);
    }

@ModelAttribute 

    /**
     * 每次访问controller都执行
     * 通过@RequestBody 从前端json获取loginVo 通过@ModelAttribute 返回成全局loginVo 
     * @return LoginVo 
     */
    @ModelAttribute
    public LoginVo show(@RequestBody LoginVo loginVo)  {
        System.out.println(loginVo.toString());
        return loginVo;
    }

 请求接口 返回token 正确   

 

第一次测试结果:可以通过@ModelAttribute 获取全局数据   但是不提倡,有弊端 

第二次验证:

验证@ModelAttribute(value="")时

需求: 当每次调用接口的时候都需要获取用户数据的时候,每个接口都写会产生冗余的代码,我们在每次请求之前在请求头中获取token获取用户数据,全局供给。

    /**
     * 根据token获取用户信息
     * @Title: show
     * @return void
     * @throws
     */
    @ModelAttribute("loginInfo")
    public LoginInfoVo show(HttpServletRequest request)  {
        try {
        String userId = JwtUtils.getUserIdByJwtToken(request);
        LoginInfoVo loginInfoVo = yzUserService.getInfoById(userId);
        return loginInfoVo;
    }catch (BusinessException e){
        e.printStackTrace();
        throw new BusinessException(ErrorCodeEnum.USER_INFO_NOT_FOUND);
    }
    }

    /**
     * 获取全局用户信息
     * @param loginInfo
     * @return
     */
    @GetMapping("auth/getLoginInfo")
    public ApiResponse getLoginInfo(@ModelAttribute("loginInfo") LoginInfoVo loginInfo){
        System.out.println("loginInfo"+loginInfo.toString());
        return ApiResponse.success(loginInfo);
    }

 

测试结果: 

@ModelAttribute注释的value属性,来指定model 属性的名称。

可以根据需求,来确定是否要用用户数据

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值