第一章 SpringBoot初接觸(進(jìn)階篇)

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é)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贞绵,隨后出現(xiàn)的幾起案子厉萝,更是在濱河造成了極大的恐慌,老刑警劉巖榨崩,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谴垫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡母蛛,警方通過查閱死者的電腦和手機(jī)翩剪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彩郊,“玉大人前弯,你說我怎么就攤上這事★牛” “怎么了恕出?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)违帆。 經(jīng)常有香客問我浙巫,道長(zhǎng),這世上最難降的妖魔是什么刷后? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任的畴,我火速辦了婚禮,結(jié)果婚禮上尝胆,老公的妹妹穿的比我還像新娘丧裁。我一直安慰自己,他們只是感情好含衔,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布煎娇。 她就那樣靜靜地躺著,像睡著了一般抱慌。 火紅的嫁衣襯著肌膚如雪逊桦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天抑进,我揣著相機(jī)與錄音强经,去河邊找鬼。 笑死寺渗,一個(gè)胖子當(dāng)著我的面吹牛匿情,可吹牛的內(nèi)容都是我干的兰迫。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼炬称,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼汁果!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玲躯,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤据德,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后跷车,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棘利,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年朽缴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了善玫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡密强,死狀恐怖茅郎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情或渤,我是刑警寧澤系冗,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站薪鹦,受9級(jí)特大地震影響毕谴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜距芬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望循帐。 院中可真熱鬧框仔,春花似錦、人聲如沸拄养。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘪匿。三九已至跛梗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棋弥,已是汗流浹背核偿。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顽染,地道東北人漾岳。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓轰绵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親尼荆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子左腔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法捅儒,內(nèi)部類的語法液样,繼承相關(guān)的語法,異常的語法巧还,線程的語...
    子非魚_t_閱讀 31,664評(píng)論 18 399
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,318評(píng)論 25 707
  • 你的頭發(fā)干枯啊荸恕,毛躁啊乖酬,掉發(fā)啊什么的,其實(shí)都是有原因造成的融求,所以如果最近一段時(shí)間你的頭發(fā)狀態(tài)很不好咬像,那你就該檢查一...
    麥小琪閱讀 272評(píng)論 3 2
  • 晝閑人寂,聽數(shù)聲鳥語悠揚(yáng)生宛,不覺耳根盡徹县昂;夜靜天高,看一片云光舒卷陷舅,頓令眼界俱空倒彰。 一場(chǎng)閑富貴,狠狠爭(zhēng)來莱睁,雖得還是失...
    HedyWang1閱讀 233評(píng)論 0 0
  • 思維經(jīng)常時(shí)空錯(cuò)亂 腦里卡頓而不自知 這段時(shí)日以來 每刻都混沌 我又開始厭惡生活了 就像喜聞榴蓮的味道而卻不喜食它 ...
    慕斯烈濃Vinky閱讀 186評(píng)論 0 0