SpringBoot 進(jìn)階
標(biāo)簽(空格分隔): springboot java springmvc
表單驗(yàn)證
- @Valid注解
//通過min注解的方式過濾
@Min(value = 18,message = "未滿18靜止入內(nèi)")
private Integer age;
/**
* 通過傳入對(duì)象的方式保證參數(shù)冗余
* 同時(shí)進(jìn)行表單驗(yàn)證
* 并加上錯(cuò)誤驗(yàn)證
* @param girl
* @return
*/
@GetMapping(value = "/insertGirl")
public Girl insertGirl(@Valid Girl girl, BindingResult bindingResult){
//驗(yàn)證是否錯(cuò)誤
if(bindingResult.hasErrors()){
System.out.print(bindingResult.getFieldError().getDefaultMessage());
return null;
}
girl.setAge(girl.getAge());
girl.setName(girl.getName());
return girlRespotity.save(girl);
}
備注:表單驗(yàn)證是對(duì)于其中參數(shù)過多单雾,則采用已經(jīng)存在的實(shí)體類對(duì)象進(jìn)行傳遞骤坐。
AOP面向切片
- AOP
aop面向切面 Aspect Oriented Programming
oop面向?qū)ο?Object Oriented Programming
pop面向過程 Proceduce Oriented Programming
@Aspect
@Component
public class HttpAspect {
//第一種方案(不適用)
//before表示在所有的請(qǐng)求之前攔截
//其中(..)表示其中的參數(shù)
@Before("execution(public * com.xiaojinzi.controller.*(..))")
public void log(){
}
//第二種方案
@PointCut ("execution(public * com.xiaojinzi.controller.*(..))")
public void log(){
}
@Before("log()")
public void dobefore(){
}
//監(jiān)聽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());
//參數(shù)
logger.info("Args={}",joinPoint.getArgs());
}
//對(duì)于返回值采用
@AfterRerurning(retrurn="object",pointcut="log()")
//將獲取url返回的結(jié)果其中需要傳入Object對(duì)象
}
統(tǒng)一異常處理
- 控制層異常處理
@ControllerAdvice(捕獲控制層異常)
@ExceptionHandler(value=Exception.class)//捕獲Exception這個(gè)類
@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());
}
}
備注:邏輯結(jié)構(gòu):為首先業(yè)務(wù)層處理邏輯 拋出異常,之后控制層拋出異常,異巢嗟控制層進(jìn)行捕捉并返回出結(jié)果。
新的問題:編寫自己的異常類
邏輯結(jié)構(gòu):編寫自己的異常類看政,之后再通過異常處理機(jī)制,將其中的內(nèi)容判斷設(shè)置抄罕。
異常統(tǒng)一維護(hù)
通過定義異常枚舉的方式
單元測(cè)試
@RunWith(SpringRunner.class) 表示在測(cè)試環(huán)境中跑
@SpringBootTest 表示將啟動(dòng)整個(gè)spring工程
//在service中添加測(cè)試方法
//創(chuàng)建測(cè)試類通過其中的驗(yàn)證方法Assert.assertEquals(),匹配數(shù)據(jù)庫中兩個(gè)值是/否相等允蚣。
//測(cè)試api
@AutoConfigureMockMvc
//測(cè)試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";
/**
* 創(chuàng)建訂單測(cè)試
* @throws Exception
*/
@Test
public void create() throws Exception {
OrderMasterDTO orderMasterDTO = new OrderMasterDTO();
orderMasterDTO.setBuyerName("小金子");
orderMasterDTO.setBuyerAddress("滁州學(xué)院");
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("【訂單結(jié)果】:{}",result);
Assert.assertNotNull(result);
}
}
- 原視頻UP主慕課網(wǎng)(兩小時(shí)入門SpringBoot)
- 本篇博客撰寫人: XiaoJinZi 轉(zhuǎn)載請(qǐng)注明出處
- 學(xué)生能力有限 附上郵箱: 986209501@qq.com 不足以及誤處請(qǐng)大佬指責(zé)