spring boot Controller 添加自定义对象注入

spring boot Controller 添加注入参数

需求

调用controller的时候直接注入一个user对象。

解决方法

通过head里面的token获取到账号到数据库查询接口。
但是为了可用性使用不能每次都写同样的代码。
可以如果在controller可以想注入 request一样注入一个user 对象就太完美了。

无废话直接上代码

定义一个handler实现HandlerMethodArgumentResolver类,并且重写resolveArgument方法。具体看代码

@Service
public class UserArgumentResolver implements HandlerMethodArgumentResolver {

    @Autowired
    ISysUserService iSysUserService;
    //supportsParameter 指定当参数类型为 User 类时才应用该参数解析器
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.getParameterType().equals(SysUser.class);
    }

    //自定义的参数解析逻辑,例如创建一个 User 对象并返回
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        String userId = authentication.getPrincipal().toString();
        SysUser user = iSysUserService.getUserByUserId(userId);
        return user;
    }
}

配置 WebMvcConfigurer 添加自定义参数解析器。
这里要的 WebMvcConfigurer 可以配置多个。可以用 @Order 定义加载顺序

@Order(2)
@Configuration
public class UserWebMvcConfigurer implements WebMvcConfigurer {
    @Autowired
    private UserArgumentResolver userArgumentResolver;

    /**
     * 添加自定义参数解析器
     * @param argumentResolvers
     */
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(userArgumentResolver);
    }

}

愉快的使用

@RequestMapping(value = "/saveFile", method = RequestMethod.POST)
@ResponseBody
@ApiOperation("上传文件")
public JSONResult uploadFile(SysUser user, @ApiParam("文件") @RequestParam("file") MultipartFile file) {
    if (file.isEmpty()) {
        return JSONResult.errorMsg("必须上传文件");
    }
    return JSONResult.ok(iSysFileService.saveFile(user.getId(), file));
}
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值