SpringBoot进阶之web进阶

1.表单验证:

实体类添加:
@Min(value = 18 ,message = "未成年少女禁止入内!")最小值限制为18,如果小于18则返回message中的信息
注入校验,获得校验结果信息
public Girl girlAdd(@Valid  Girl girl , BindingResult bindingResult){
    if(bindingResult.hasErrors()){
        System.out.println(bindingResult.getFieldError().getDefaultMessage());
        return  null;
    }
    girl.setCupSize(girl.getCupSize());
    girl.setAge(girl.getAge());
    return girlRepository.save(girl);
}
BindingResult 验证不通过时进行返回信息的对象

2.使用AOP处理请求
AOP
将通用逻辑从业务逻辑中分离出来
使用AOP第一步,添加依赖:

spring-boot-starter-aop

使用拦截器实例:

拦截器的改进写法:

为了避免代码重复书写,定义一个公用方法,@Pointcut注解声明切入点
@Before @After 两注解直接复用该方法切入点
@Aspect
@Component
public class HttpAspect {
    private final static Logger logger= LoggerFactory.getLogger(HttpAspect.class);

    @Pointcut("execution(public * com.example.project.web.CustomerContorller.*(..))")
    public void log(){
    }
    @Before("log()")
    public void doBefore(){
        logger.info("aaaa");

    }
    @After("log()")
    public void doAfter(){
        logger.info("bbbb");
    }

}

拦截请求:

@Before("log()")
    public void doBefore(JoinPoint joinPoint) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = (HttpServletRequest) attributes.getRequest();
        logger.info("url={}", request.getRequestURL());
        logger.info("method={}", request.getMethod());
        logger.info("ip={}", request.getRemoteAddr());
        logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        logger.info("args ={}", joinPoint.getArgs());

        logger.info("111111111111111111111111111111");
    }

    @AfterReturning(returning = "object", pointcut = "log()")//获取请求结果的内容
    public void doAfterReturn(Object object) {
        logger.info("response={}", object);
    }
把请求的返回结果写成工具类:

3.统一异常处理

自定义异常类:为什么要继承,因为spring只对RunTimeException进行事务回滚

业务层直接向外抛异常:

自定义异常处理类:遮盖部分是getMessage()

自定义枚举类,统一异常的管理:

    没有set方法哦,因为不需要set

4.单元测试:

三个注解为,
1. @RunWith(SpringRunner.class)现在要在测试环境中跑,底层使用的是junit测试工具
2. @SpringBootTest   将启动整个spring工程
3. @AutoConfigureMockMvc

mock:仿制 perform:执行
自动注入后,调用mockMvc.perform(MockMvcRequestBuilders.get("[url]")).andExpect(MockMvcResultMatchers.status().isOk());


原文地址:https://www.cnblogs.com/jiliunyongjin/p/7424758.html