异常处理程序不使用@ResponseStatus中的值

时间:2017-05-22 20:24:20

标签: java spring

我有以下控制器建议来全局处理我的应用程序中的异常:

@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"
}

如何为此返回一个简单的BAD REQUEST消息,因为它是为@ExceptionHandler定义的。

注意ConstraintViolationExceptionHandler被击中了!

0 个答案:

没有答案