【SpringBoot】web进阶——表单验证,AOP统一处理请求日志,统一异常处理,单元测试

本文详细介绍了SpringBoot在web开发中的进阶应用,包括如何进行表单验证,利用AOP实现请求日志的统一处理,建立全面的统一异常处理机制,以及进行单元测试的方法和实践。
摘要由CSDN通过智能技术生成

表单验证

 
@valid 注解应用 1 在实体类添加限制条件的注解 并标明返回message
                           2 在 请求参数前添加 @valid 注解
@Valid-检验,结果返回到BindingResult对象中
public void **(@Valid Girl girl,BindingResult bindingResult){
	if(bindingResult.hasErrors()){
		String errmessage = bindingResult.getFieldError().getDefaultMessage();
	}
	...
}

class Girl(){
	@Min(value=18,message="***")
	Integer age;
}
关于建包之后出现404错误,有可能是建包的位置不对,建包的文位置应该跟入口启动文件为同一级


AOP统一处理请求日志

 
AOP(面向切面编程)是一种范式,并不是只有在java中才会出现,   .net C# C艹 中都有实现AOP思想
OOP(面向对象)
首先,需要在pom中引入aop的包
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

然后建立一个类,用
@Aspect
@Component
做注解


然后,在类中需要统一处理的方法,并用@before注释一下需要应用切面的包或者类或者方法
 @Before("execution(public * com.quanxian.quanxian.controller.UserController.*(..))")
    public void log()
    {
        System.out.println("111111");
    }
通过logger日志来打印控制台信息。logger.info();会打印日志的相关信息。线程号,端口,包名,时间。
@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");
    }

}
【aop中获取HttpRequest请求数据:】
//url
//method
//ip
//类方法-使用joinPoint对象取
//参数

【aop中获取方法返回内容】
@AfterReturning(pointcut=***)
public void do_log(Object obj){
    //{}为占位
    log.info("return={}",obj.toString())
}


统一异常处理

统一异常处理。现在的前端和后端都是分离的,返回的大多数都是json格式的。如果发生异常最好也转化为json格式发送给前端。所以我们必须对抛出去的异常进行统一的格式处理。
第一步:@controlleradvice (异常捕获之前的注解)

第二步:在方法前面加注解 @ExceptionHandler
spring只会针对RuntimeException进行回滚,而不会对Exception进行回滚
分两种异常------系统异常和自定义异常,通过instanceof判断异常类。
异常情况统一管理,建立枚举类,提高内聚性,逻辑在一个地方处理,为后续更改提供便利。public enum ResultEnum{  ...  }
 

单元测试

--Service 测试
@RunWith(SpringRunner.class)-表示在测试环境
@SpringBootTest-表示将启动整个spring工程 这两个是类之上加的注解
public class GirkServiceTest{
	@Autowired
	provate GirlService gservice;
	
	@Test 这个是方法上加的注解
	public void findOneTest(){
	    Girl girl = gservice.findOne(73);
		//断言,判断是否正确,测试service通过与否
		Assert.assertEquals(new Integer(14),girl.getAge());
	}
}

--Controller 测试 对API的一个测试
@RunWith(SpringRunner.class) 表示要在测试环境下跑
@SpringBootTest 表示将启动整个spring工程
@AutoConfigureMockMvc //add
public class GirlControllerTest{
  @Autowired
  private MockMvc mvc;
  
  @Test
  public void girlList()throws Exception{
    mvc.perform(MockMvcRequestBuilders.get("/girls"))
	  //判断请求返回码为200
	  .andExpect(MockMvcResultMatchers.status().isOk())
	  //判断返回的内容为abc
	  .andExpect(MockMvcResultMatchers.content().string("abc"))
  }

  mvn clean packet -- 命令打包时会自动进行单元测试并返回 结果
  mvn clean packet -Dmaven.test.skip=true -- 表示打包时跳过单元测试

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值