优雅的书写Controller

不优雅的Controller

@RestController
@RequestMapping("/user/test")
public class UserController {

    private static Logger logger = LoggerFactory.getLogger(UserController.class);

    @Autowired
    private UserService userService;

    @Autowired
    private AuthService authService;

    @PostMapping
    public CommonResult userRegistration(@RequestBody UserVo userVo) {
        if (StringUtils.isBlank(userVo.getUsername())){
            return CommonResult.error("用户名不能为空");
        }
        if (StringUtils.isBlank(userVo.getPassword())){
            return CommonResult.error("密码不能为空");
        }
        logger.info("注册用户:{}" , userVo.getUsername());
        try {
            userService.registerUser(userVo.getUsername());
            return CommonResult.ok();
        }catch (Exception e){
            logger.error("注册用户失败:{}", userVo.getUsername(), e);
            return CommonResult.error("注册失败");
        }
    }

    @PostMapping("/login")
    @PermitAll
    @ApiOperation("使用账号密码登录")
    public CommonResult<AuthLoginRespVO> login(@RequestBody AuthLoginReqVO reqVO) {
        if (StringUtils.isBlank(reqVO.getUsername())){
            return CommonResult.error("用户名不能为空");
        }
        if (StringUtils.isBlank(reqVO.getPassword())){
            return CommonResult.error("密码不能为空");
        }
        try {
            return success(authService.login(reqVO));
        }catch (Exception e){
            logger.error("注册用户失败:{}", reqVO.getUsername(), e);
            return CommonResult.error("注册失败");
        }
    }

}

优雅的Controller

@RestController
@RequestMapping("/user/test")
public class UserController1 {

    private static Logger logger = LoggerFactory.getLogger(UserController1.class);

    @Autowired
    private UserService userService;

    @Autowired
    private AuthService authService;

    @PostMapping("/userRegistration")
    public CommonResult userRegistration(@RequestBody @Valid UserVo userVo) {
        userService.registerUser(userVo.getUsername());
        return CommonResult.ok();
    }

    @PostMapping("/login")
    @PermitAll
    @ApiOperation("使用账号密码登录")
    public CommonResult<AuthLoginRespVO> login(@RequestBody @Valid AuthLoginReqVO reqVO) {
        return success(authService.login(reqVO));
    }

}
  • 改造流程:
    • 校验方式:
      使用spring提供的@Valid
      在入参时使用@Valid注解,并且在VO中使用校验注解。
      @Vaild
      在SpringBoot中,@Vaild是一个非常有用的注解,主要用于数据校验。
      使用 @Valid 来验证参数:
      在编写接口时,我们经常需要验证请求参数。通常, 我们可能会写大量的 if 和 if else 代码来进行判断。但这样写的代码不仅不优雅,而且如果存在大量的验证逻辑,这会使代码看起来混乱,大大降低代码的可读性。为了简化这个过程,我们可以使用@Valid注解来帮助我们简化验证逻辑。
      @Valid 注解的作用:
      @Valid 的主要作用是用于数据校验,可以在定义的实体中的属性上,添加不同的注解来完成不同的校验规则,而在接口类中的接收数据参数中添加 @Valid 注解,这时实体将会开启一个校验功能。
      @Valid 的相关注解:
      在实体类中不同的属性添加不同的注解,就能实现不同数据的校验功能。
      使用 @Valid 进行参数的校验步骤:
      整个过程如下,用户访问接口,然后进行参数校验,因为@Valid 不支持平面的参数校验 (直接写在参数中字段的校验) 所以基于 GET 请求的参数还是按照原先方式进行校验,而 POST 则可以以实体对象为参数, 可以使用 @Valid 方式进行校验。如果校验通过,则进入业务逻辑,否则抛出异常,交由全局异常处理器处理。
      @Validated 与 @Valid 的区别:
      @Validated 是 @Valid 的变体。通过声明实体中的属性的 groups,再搭配 @Validated,就能决定哪些属性需要校验,哪些不需要校验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值