java回顾和leetcode刷题(四)

16 篇文章 2 订阅
5 篇文章 0 订阅

1、@NotBlank 、 @NotEmpty 、 @NotNull 的简单区别

  • @NotBlank 主要用于String 中判断空格
  • @NotEmpty 主要用于集合
  • @NotNull 就是不为空,在基本类型上面

2、表单提交部分,注解验证参数

问题的环境:验证提交的表单里面的数据
解决方法
(1)、可以先给它创建一个验证这些表单字段的model对象(这里的话,叫做From)
(2)、然后From里面写上要验证的字段名称,并且加上@NotBlank注解(引入的是这个 import javax.validation.constraints.NotBlank;),把一些输入的空格给它去掉;同时,开头加上@Data注解
(3)、在Controller上面写上@Valid注解 和 BindingResult bindingResult (@Valid注解和bindingResult一起使用的)
在这里插入图片描述
在这里插入图片描述
(4)、getField和getDefultMessage写在return上面看看效果,不过这个时候,要先去写下ResponseVo里面的方法,第一个参数还是Enum,第二个参数的话,用的是String 类型的,然后的话,控制台那里用getXXX + " "+ getXXX给它拼接上一个字符串就可以了。
在这里插入图片描述
(5)、写在Controller里面也太乱了,有没有简洁一些的,比如把那么一长串的字符串放在ResponseVo里面,那么就有了如下图所示的图片了
在这里插入图片描述
在这里插入图片描述

更多的注解如下
在这里插入图片描述

public class Test {

    @NotNull(message = "ID不能为空")
    @Range(min = 1, max = 100, message = "ID必须在1到100之间")
    private Integer id;

    @NotBlank(message = "姓名不能为空")
    @Length(min = 2, max = 6, message = "姓名必须在2到6位之间")
    private String name;

    @NotNull(message = "余额不能为空")
    @DecimalMax(value = "30.50", message = "余额不能超过30.5")
    @DecimalMin(value = "1.50", message = "余额不能低于1.5")
    private BigDecimal amount;

    @NotNull(message = "生日不能为空")
    @Past(message = "生日必须是过去")
    private Date birthday;

    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;

    @NotBlank(message = "手机号不能为空")
    @Pattern(regexp = "^(((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[6])|(17[0135678])|(18[0-9])|(19[89]))\\d{8})$", message = "手机号格式错误")
    private String phone;

}

然后在controller的每个接口中使用@Validated和BindingResult类
@Validated注解用于验证一个入参,验证之后的消息绑定到BindingResult类中

@PostMapping("/test")
    @ApiOperation(value = "测试", notes = "", response = Result.class)
    public Result test(@ApiParam(name = "test", value = "参数", required = true) @Validated @RequestBody Test test, BindingResult bindingResult) {
        if(bindingResult.hasErrors()){
            String errorMsg = bindingResult.getFieldError().getDefaultMessage();
            return Result.error(errorMsg);
        }
        return Result.ok("参数验证通过");
    }

3、处理异常

3.1 先模拟一个异常吧
private void error(){
        throw new RuntimeException("意外错误");
    }

然后把这个error()放在这个上面
在这里插入图片描述

运行后的结果当然是500啦,如下图所示
在这里插入图片描述

3.2 处理异常 @ControllerAdvice

(1)、先写一个包,叫做exception,然后再写个类吧,叫RuntimeExceptionHandler,这里的话,先给它加上注解 @ControllerAdvice ,
(2)、里面返回的还是ResponseVo,里面的话,return那个异常就可以
(3)、然后注解的话是@ExceptionHandler(RuntimeException.class)
(4)、返回的是JSON格式的,记得加上@ResponseBody
(5)、最后结果返回的是200
在这里插入图片描述
在这里插入图片描述

(6)、附加 假如要返回HTTP的某一个状态码应该怎么做(比如返回的是200,或者是500 。。。)

  • 首先先写上@ResponseStatus(HttpStatus)
  • 然后点击HttpStatus可以看到下面第一张图片,里面显示出了各种状态码
  • 我们可以选各种各样的状态码,比如,我们选择405
  • 那么在注解上,我们就写@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED),运行Postman,看看效果如何

在这里插入图片描述
如下图所示,已经成功的返回了405(我们预期的数字)
在这里插入图片描述

@ControllerAdvice
public class RunTimeExceptionHandler {

    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    //@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
    public ResponseVo handle(RuntimeException e){
        return ResponseVo.error(ResponseEnum.SERVICE_ERROR, e.getMessage());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

隐形的稻草人HWS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值