????????在處理請(qǐng)求的過(guò)程中可能產(chǎn)生異常,如果這個(gè)異常表明這次請(qǐng)求不會(huì)得到正常的處理撬讽,那么應(yīng)當(dāng)向用戶告知尚猿。Spring已經(jīng)內(nèi)置了一些規(guī)則,當(dāng)在處理請(qǐng)求的過(guò)程拋出如下異常贡茅,那么就會(huì)自動(dòng)的設(shè)置響應(yīng)狀態(tài)碼∑渥觯可以通過(guò)在Mapping Request的方法中直接拋出這些異常來(lái)測(cè)試是否會(huì)自動(dòng)設(shè)置響應(yīng)狀態(tài)碼顶考,返回響應(yīng)。
這些內(nèi)置的映射非常有用妖泄,但是對(duì)于其他異常就無(wú)能為力了驹沿。如果要把自定義的異常也映射到響應(yīng)狀態(tài)碼,這個(gè)非常簡(jiǎn)單只需要在自定義的異常類上添加注解:@ResponseStatus蹈胡,設(shè)置這個(gè)注解的value屬性渊季。值域是枚舉類HttpStatus中包含的值。
? ? ? ? 如果并不想簡(jiǎn)單的只是簡(jiǎn)單的給出一個(gè)表示請(qǐng)求處理失敺=ァ(狀態(tài)碼揭示了這一點(diǎn))的響應(yīng)却汉,那么可以通過(guò)在一個(gè)Controller類中定義被@ExceptionHandler注解的方法。
? ? ? ? 在一個(gè)Controller類中添加ExceptionHandler方法,ExceptionHandler方法只會(huì)在該Controller類中有效源织,對(duì)于其他的Controller類無(wú)效翩伪,如果要定義一個(gè)ExceptionHandler方法使得能夠“應(yīng)付”任何一個(gè)Controller的任何一個(gè)處理器方法拋出的對(duì)應(yīng)的異常,這需要定義了一個(gè)ControllerAdvice類谈息。ControllerAdvice類是一個(gè)被@ControllerAdvice注解的類缘屹,@ControllerAdvice已經(jīng)包含@Component注解。之后在ControllerAdvice類中定義ExceptionHandler方法就可以了侠仇。