JSON 支持全局异常处理程序 Spring MVC Rest 控制器
JSON support in Global Exception Handler Spring MVC Rest controller
我正在 spring mvc 应用程序中使用 rest 控制器创建一个全局异常处理程序。
当我抛出异常时,全局异常处理程序会从控制器捕获它,但它不会 returning json 数据。但是当我在控制器中使用@ExceptionHandler 时,它 returns json data.
控制器代码:
import javax.validation.Valid;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.sphiextest1back.bean.NewUserBean;
import com.sphiextest1back.bean.ResponseBean;
import com.sphiextest1back.exception.FieldValidationException;
@RestController
@RequestMapping(value = "/service")
public class User {
@RequestMapping(value = "/test/test", method = RequestMethod.GET)
public ResponseBean testFunc(@Valid NewUserBean newUserBean, BindingResult result) throws FieldValidationException {
ResponseBean responseBean = new ResponseBean();
if(result.hasErrors()) {
throw new FieldValidationException("Error in field values", responseBean);
}
else {
responseBean.setMessage("Test Message1");
responseBean.setSuccess(true);
responseBean.setStatusCode(200);
}
return responseBean;
}
/**This Works fine when uncommented**/
/*@ExceptionHandler(FieldValidationException.class)
@ResponseBody
public ResponseBean handleFieldValidationException(Exception ex) {
ResponseBean responseBean = new ResponseBean();
responseBean.setStatusCode(401);
responseBean.setMessage(ex.getMessage());
responseBean.setSuccess(false);
return responseBean;
}*/
}
但是当使用全局异常处理程序时,它不会 returning json 数据而是显示状态为 500 的 HTTP 错误页面。
这是我的全局异常处理程序代码。
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import com.sphiextest1back.bean.ResponseBean;
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* Method handles the FieldValidationException
*
* @param ex
* @return responseBean
*/
@ExceptionHandler(FieldValidationException.class)
public @ResponseBody ResponseBean handleFieldValidationException(Exception ex) {
ResponseBean responseBean = new ResponseBean();
responseBean.setStatusCode(401);
responseBean.setMessage(ex.getMessage());
responseBean.setSuccess(false);
return responseBean;
}
}
有没有办法从 ResponseBean 对象 return json 数据!!
这是我的错误。在 xml 文件中,我没有包含
的全局异常包
现在我包含了这个包,它工作正常。
我正在 spring mvc 应用程序中使用 rest 控制器创建一个全局异常处理程序。
当我抛出异常时,全局异常处理程序会从控制器捕获它,但它不会 returning json 数据。但是当我在控制器中使用@ExceptionHandler 时,它 returns json data.
控制器代码:
import javax.validation.Valid;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.sphiextest1back.bean.NewUserBean;
import com.sphiextest1back.bean.ResponseBean;
import com.sphiextest1back.exception.FieldValidationException;
@RestController
@RequestMapping(value = "/service")
public class User {
@RequestMapping(value = "/test/test", method = RequestMethod.GET)
public ResponseBean testFunc(@Valid NewUserBean newUserBean, BindingResult result) throws FieldValidationException {
ResponseBean responseBean = new ResponseBean();
if(result.hasErrors()) {
throw new FieldValidationException("Error in field values", responseBean);
}
else {
responseBean.setMessage("Test Message1");
responseBean.setSuccess(true);
responseBean.setStatusCode(200);
}
return responseBean;
}
/**This Works fine when uncommented**/
/*@ExceptionHandler(FieldValidationException.class)
@ResponseBody
public ResponseBean handleFieldValidationException(Exception ex) {
ResponseBean responseBean = new ResponseBean();
responseBean.setStatusCode(401);
responseBean.setMessage(ex.getMessage());
responseBean.setSuccess(false);
return responseBean;
}*/
}
但是当使用全局异常处理程序时,它不会 returning json 数据而是显示状态为 500 的 HTTP 错误页面。
这是我的全局异常处理程序代码。
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import com.sphiextest1back.bean.ResponseBean;
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* Method handles the FieldValidationException
*
* @param ex
* @return responseBean
*/
@ExceptionHandler(FieldValidationException.class)
public @ResponseBody ResponseBean handleFieldValidationException(Exception ex) {
ResponseBean responseBean = new ResponseBean();
responseBean.setStatusCode(401);
responseBean.setMessage(ex.getMessage());
responseBean.setSuccess(false);
return responseBean;
}
}
有没有办法从 ResponseBean 对象 return json 数据!!
这是我的错误。在 xml 文件中,我没有包含
的全局异常包现在我包含了这个包,它工作正常。