spring-boot-expection-handler
/**
* 获取 用户接口
* @param account
* @return
* @throws GlobalErrorInfoException
*/
@ GetMapping
public ResultBody findUsers (String account ) throws GlobalErrorInfoException {
// 入参为空
if (StringUtils .isEmpty (account )) {
throw new GlobalErrorInfoException (ErrorInfoEnum .PARAMS_NOT_NULL );
}
return new ResultBody (new User (1L , account , "admin" , 18 , 1 ));
}
/**
* 测试支持通配符匹配
* @param account
* @return
* @throws GlobalErrorInfoException
*/
@ GetMapping ("args" )
public ResultBody findUsers3 (String account ) throws GlobalErrorInfoException {
// 入参为空
if (StringUtils .isEmpty (account )) {
Object [] args = new Object []{"啊啊啊啊" , "哈哈哈哈哈" };
throw new GlobalErrorInfoException (ErrorInfoEnum .PARAMS_NOT_NULL2 , args );
}
return new ResultBody (new User (1L , account , "admin" , 18 , 1 ));
}
/**
* 测试全局异常
* @param account
* @return
*/
@ GetMapping ("other" )
public ResultBody otherExpetion (String account ) {
int i = 1 / 0 ;
return new ResultBody (new User (1L , account , "admin" , 18 , 1 ));
}
@ RestControllerAdvice
public class GlobalErrorInfoHandler {
private static Logger logger = LoggerFactory .getLogger (GlobalErrorInfoHandler .class );
/**
* 全局系统异常
* @param request
* @param exception
* @return
*/
@ ExceptionHandler (value = RuntimeException .class )
public ResultBody errorHandlerOverJson (HttpServletRequest request , RuntimeException exception ) {
logger .error ("全局异常:" , exception .getMessage ());
ResultBody result = new ResultBody (GlobalErrorInfoEnum .NOT_FOUND );
return result ;
}
/**
* GlobalErrorInfoException 系统异常
* @param request
* @param exception
* @return
*/
@ ExceptionHandler (value = GlobalErrorInfoException .class )
public ResultBody errorHandlerOverJson (HttpServletRequest request , GlobalErrorInfoException exception ) {
ErrorInfo errorInfo = exception .getErrorInfo ();
getMessage (errorInfo ,exception .getArgs ());
ResultBody result = new ResultBody (errorInfo );
return result ;
}
private void getMessage (ErrorInfo errorInfo ,Object ...agrs ) {
String message = null ;
if (!StringUtils .isEmpty (errorInfo .getCode ())) {
message = MessageUtils .message (errorInfo .getCode (), agrs );
}
if (message == null ) {
message = errorInfo .getMessage ();
}
errorInfo .setMessage (message );
}
}
000001 =params not null in properties
000002 =params not null {0} in properties {1}
@ Test
public void testSuccessGetUser () throws Exception {
String uri = "/api/user?account=admin" ;
MvcResult mvcResult = mvc .perform (MockMvcRequestBuilders .get (uri ).accept (MediaType .APPLICATION_JSON )).andReturn ();
int status = mvcResult .getResponse ().getStatus ();
String content = mvcResult .getResponse ().getContentAsString ();
System .out .println (status );
System .out .println (content );
}
Result:{"code":"200","message":"success","result":{"id":1,"account":"admin","name":"admin","age":18,"sex":1}}
/**
* 测试i18n
* @throws Exception
*/
@ Test
public void testErrorGetUser () throws Exception {
String uri = "/api/user" ;
MvcResult mvcResult = mvc .perform (MockMvcRequestBuilders .get (uri ).accept (MediaType .APPLICATION_JSON )).andReturn ();
int status = mvcResult .getResponse ().getStatus ();
String content = mvcResult .getResponse ().getContentAsString ();
System .out .println (status );
System .out .println (content );
}
Result:{"code":"000001","message":"params not null in properties","result":null}
/**
* 测试i18n 通配符
* @throws Exception
*/
@ Test
public void testErrorGetUserargs () throws Exception {
String uri = "/api/user/args" ;
MvcResult mvcResult = mvc .perform (MockMvcRequestBuilders .get (uri ).accept (MediaType .APPLICATION_JSON )).andReturn ();
int status = mvcResult .getResponse ().getStatus ();
String content = mvcResult .getResponse ().getContentAsString ();
System .out .println (status );
System .out .println (content );
}
}
Result:{"code":"000002","message":"params not null 啊啊啊啊 in properties 哈哈哈哈哈","result":null}
/**
* 测试全局异常
* @throws Exception
*/
@ Test
public void testOther () throws Exception {
String uri = "/api/user/other" ;
MvcResult mvcResult = mvc .perform (MockMvcRequestBuilders .get (uri ).accept (MediaType .APPLICATION_JSON )).andReturn ();
int status = mvcResult .getResponse ().getStatus ();
String content = mvcResult .getResponse ().getContentAsString ();
System .out .println (status );
System .out .println (content );
}
Result:{"code":"00000","message":"global service error!","result":null}