SpringBoot 进阶
标签(空格分隔): springboot java springmvc
表单验证
- @Valid注解
//通过min注解的方式过滤
@Min(value = 18,message = "未满18静止入内")
private Integer age;
/**
* 通过传入对象的方式保证参数冗余
* 同时进行表单验证
* 并加上错误验证
* @param girl
* @return
*/
@GetMapping(value = "/insertGirl")
public Girl insertGirl(@Valid Girl girl, BindingResult bindingResult){
//验证是否错误
if(bindingResult.hasErrors()){
System.out.print(bindingResult.getFieldError().getDefaultMessage());
return null;
}
girl.setAge(girl.getAge());
girl.setName(girl.getName());
return girlRespotity.save(girl);
}
备注:表单验证是对于其中参数过多,则采用已经存在的实体类对象进行传递。
AOP面向切片
- AOP
aop面向切面 Aspect Oriented Programming
oop面向对象 Object Oriented Programming
pop面向过程 Proceduce Oriented Programming
@Aspect
@Component
public class HttpAspect {
//第一种方案(不适用)
//before表示在所有的请求之前拦截
//其中(..)表示其中的参数
@Before("execution(public * com.xiaojinzi.controller.*(..))")
public void log(){
}
//第二种方案
@PointCut ("execution(public * com.xiaojinzi.controller.*(..))")
public void log(){
}
@Before("log()")
public void dobefore(){
}
//监听URL
public void doBefore(JoinPoint joinPoint){
//logger.info("111111");
//url
logger.info("url={}",request.getRequestURL());
//method
logger.info("method={}",request.getMethod());
//ip
logger.info("ip={}",request.getRemoteAddr());
//类方法
logger.info("class={}",joinPoint.getSignature().getDeclaringTypeName()+","+joinPoint.getSignature().getName());
//参数
logger.info("Args={}",joinPoint.getArgs());
}
//对于返回值采用
@AfterRerurning(retrurn="object",pointcut="log()")
//将获取url返回的结果其中需要传入Object对象
}
统一异常处理
- 控制层异常处理
@ControllerAdvice(捕获控制层异常)
@ExceptionHandler(value=Exception.class)//捕获Exception这个类
@ResponseBody
//案例
@ControllerAdvice
public class SellExceptionHandler {
/**
* 异常处理
* @param e
* @return
*/
@ExceptionHandler(value = SellException.class)
@ResponseBody
public ResultVo sellerExceptionHandler(SellException e){
return ResultVOUtil.error(e.getCode(),e.getMessage());
}
}
备注:逻辑结构:为首先业务层处理逻辑 抛出异常,之后控制层抛出异常,异常控制层进行捕捉并返回出结果。
新的问题:编写自己的异常类
逻辑结构:编写自己的异常类,之后再通过异常处理机制,将其中的内容判断设置。
异常统一维护
通过定义异常枚举的方式
单元测试
@RunWith(SpringRunner.class) 表示在测试环境中跑
@SpringBootTest 表示将启动整个spring工程
//在service中添加测试方法
//创建测试类通过其中的验证方法Assert.assertEquals(),匹配数据库中两个值是/否相等。
//测试api
@AutoConfigureMockMvc
//测试api
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class GirlContollerTest{
@Autowired
private MockMvc mvc;
@Test
public void girlList() throw Exception(){
mvc.perform(MockMvcRequestBuilders.get("/girls"))
.andExcept(MockMvcResultMatchers.status().isOk());
}
}
//案例
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class OrderServiceImplTest {
@Autowired
private OrderServiceImpl orderService;
private final String BUYER_OPENID = "110110";
private final String ORDER_ID = "1510814632739603664";
/**
* 创建订单测试
* @throws Exception
*/
@Test
public void create() throws Exception {
OrderMasterDTO orderMasterDTO = new OrderMasterDTO();
orderMasterDTO.setBuyerName("小金子");
orderMasterDTO.setBuyerAddress("滁州学院");
orderMasterDTO.setBuyerPhone("12345679812");
orderMasterDTO.setBuyerOpenid(BUYER_OPENID);
List<OrderDetail> orderDetails = new ArrayList<>();
OrderDetail o1 = new OrderDetail();
o1.setProductId("123456");
o1.setProductQuantity(1);
orderDetails.add(o1);
orderMasterDTO.setOrderDetailList(orderDetails);
OrderMasterDTO result = orderService.create(orderMasterDTO);
log.info("【订单结果】:{}",result);
Assert.assertNotNull(result);
}
}
- 原视频UP主慕课网(两小时入门SpringBoot)
- 本篇博客撰写人: XiaoJinZi 转载请注明出处
- 学生能力有限 附上邮箱: 986209501@qq.com 不足以及误处请大佬指责