【SpringBoot】web进阶——表单验证,AOP统一处理请求日志,统一异常处理,单元测试
2018-02-28 10:13
2341 查看
表单验证
@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格式发送给前端。所以我们必须对抛出去a12b的异常进行统一的格式处理。第一步:@controlleradvice (异常捕获之前的注解)第二步:在方法前面加注解 @ExceptionHandlerspring只会针对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 -- 表示打包时跳过单元测试 }
相关文章推荐
- 46. Spring Boot中使用AOP统一处理Web请求日志【从零开始学Spring Boot】
- Spring Boot中使用AOP统一处理Web请求日志
- 46. Spring Boot中使用AOP统一处理Web请求日志【从零开始学Spring Boot】
- Spring Boot中使用AOP统一处理Web请求日志
- springboot【19】日志管理之使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot(十一)使用AOP,@Aspect统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Cloud Spring Boot mybatis分布式微服务云架构(四十)使用AOP统一处理Web请求日志(1)
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot教程(六)使用AOP统一处理Web请求日志
- (十四)SpringBoot使用AOP统一处理Web请求日志添加MDC
- Spring Boot入门(6)-使用AOP统一处理Web请求日志
- 详解Spring Boot中使用AOP统一处理Web请求日志
- springboot-web进阶(二)——AOP统一处理请求
- (转)Spring Boot中使用AOP统一处理Web请求日志