Java 异常处理程序不使用';t使用@ResponseStatus中的值
我有以下控制器建议来处理我的应用程序中的全局异常:Java 异常处理程序不使用';t使用@ResponseStatus中的值,java,spring,Java,Spring,我有以下控制器建议来处理我的应用程序中的全局异常: @ControllerAdvice public class ExceptionHandlingController { // Convert a predefined exception to an HTTP Status code @ResponseStatus(value=HttpStatus.BAD_REQUEST) // 400 @ExceptionHandler(ConstraintViola
@ControllerAdvice
public class ExceptionHandlingController {
// Convert a predefined exception to an HTTP Status code
@ResponseStatus(value=HttpStatus.BAD_REQUEST) // 400
@ExceptionHandler(ConstraintViolationException.class)
public void ConstraintViolationExceptionHandler() {
//Nothing to do
}
}
下面的代码是控制器,它尝试将对象保存到db(在服务层中)。对象所属的类具有失败的注释
@RequestMapping(value = "/signup", method = RequestMethod.POST)
public void create(@RequestBody CustomUserDetails user, HttpServletResponse response) {
logger.debug("User signup attempt with username: " + username);
userDetailsServices.saveIfNotExists(user);
}
我希望客户端在抛出ConstraintViolationException时收到400响应
当方法返回void
时,不返回响应。当我更改它String
并返回一个随机文本时,返回404响应
{
"timestamp": 1495489172770,
"status": 404,
"error": "Not Found",
"exception": "javax.validation.ConstraintViolationException",
"message": "Validation failed for classes [security.model.CustomUserDetails] during persist time for groups [javax.validation.groups.Default, ]\nList of constraint violations:[\n\tConstraintViolationImpl{interpolatedMessage='must match \"^(?!.*\\..*\\..*)[A-Za-z]([A-Za-z0-9.]*[A-Za-z0-9]){8,15}$\"', propertyPath=username, rootBeanClass=class com.boot.cut_costs.security.model.CustomUserDetails, messageTemplate='{javax.validation.constraints.Pattern.message}'}\n]",
"path": "/signup"
}
如何使此返回成为为@ExceptionHandler
定义的简单错误请求消息
注意:
ConstraintViolationExceptionHandler
被命中 你能发布包含注释的控制器吗?我添加了控制器代码。你很可能会得到500,因为spring假设当@controller
注释类有一个@RequestMapping
返回字符串的方法时,该字符串是视图的名称(失败的视图查找结果是500错误)。您正在尝试构建rest端点吗?是的,我是。我犯了一个错误。返回404。我更新了帖子。ConstraintViolationExceptionHandler真的什么都不做吗?看来你还没有提供一切。假设您正在将一个异常映射到某个对象并返回它,该异常被序列化为您提供的json。您可以发布包含注释的控制器吗?我添加了控制器代码。您很可能会得到一个500,因为当@controller
注释的类具有@RequestMapping
返回一个字符串,该字符串是视图的名称(失败的视图查找结果是一个500错误)。您正在尝试构建rest端点吗?是的,我是。我犯了一个错误。返回404。我更新了帖子。ConstraintViolationExceptionHandler真的什么都不做吗?看来你还没有提供一切。假设您正在将异常映射到某个对象并返回它,该对象被序列化为您提供的json