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());