Получение ConstraintViolationException вместо MethodArgumentNotValidException при использовании @valid с @RequestBody в JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Получение ConstraintViolationException вместо MethodArgumentNotValidException при использовании @valid с @RequestBody в

Сообщение Anonymous »

Я продолжаю свое путешествие по изучению загрузки Spring, прямо сейчас я застрял между двумя похожими исключениями, где бы я ни нашел, я получил ответ, что если @valid или @validate используются на уровне контроллера/сервиса вместе с @RequestBody мы должны получить MethodArgumentNotValidException
тогда как я получаю ConstraintViolationException во время вызовов API публикации и обновления. снова и снова вызов выполняется в методе globalExceptionHandler класса ExceptionHAndler, где отображается исключение ограничения ограничения.
PostController.java

Код: Выделить всё

@RestController
@RequestMapping("/api/posts")
public class PostController {

@Autowired
private PostService postService;

//rest API endpoint to post http:localhost:8080/api/posts
@PostMapping
public ResponseEntity
 createPost(@Valid @RequestBody PostDTO postDTO){
return new ResponseEntity(postService.createPost(postDTO),HttpStatus.CREATED);
}

@PostMapping(path = "/multiple")
public ResponseEntity createMultiplePosts(@Valid @RequestBody List postDTO){

return new ResponseEntity(postService.createMultiplePosts(postDTO),HttpStatus.CREATED);
}
Класс сущности:
Posts.java

Код: Выделить всё

@Entity
@Table(name = "posts", uniqueConstraints = {@UniqueConstraint(columnNames = {"titles"})})
public class Posts {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(name = "titles")
@NotEmpty
@Size(min = 2,message = "post title should contain atleast 2 character")
private String title;
@Column(name = "description")
@NotEmpty
@Size(min = 10,message = "post description should contain atleast 2 character")
private String description;
@Column(name = "content")
@NotEmpty
private String content;
GlobalException.java

Код: Выделить всё

@ControllerAdvice
public class GlobalException extends ResponseEntityExceptionHandler {

private static final Logger logger = LoggerFactory.getLogger(GlobalException.class);

@ExceptionHandler(ResouceNotFoundException.class)
ResponseEntity PostNotFoundExceptionHandler(ResouceNotFoundException exception, WebRequest webRequest){

ErrorDetails errorDetails =new ErrorDetails(new Date(),exception.getMessage(),webRequest.getDescription(false));
return new ResponseEntity(errorDetails,HttpStatus.NOT_FOUND);
}

@ExceptionHandler(BlogApiException.class)
ResponseEntity CommentNotFoundExceptionHandler(BlogApiException exception, WebRequest webRequest){

ErrorDetails errorDetails =new ErrorDetails(new Date(),exception.getMessage(),webRequest.getDescription(false));
return new ResponseEntity(errorDetails,HttpStatus.NOT_FOUND);
}

@Override
//  @ExceptionHandler(MethodArgumentNotValidException.class)
protected ResponseEntity handleMethodArgumentNotValid(
MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request){

logger.info("inside handleMethodArgumentNotValid class");
Map errorsMap =new HashMap();
ex.getBindingResult().getAllErrors().forEach((error)->{

String fieldNameString = ((FieldError)error).getField();
String messageString = error.getDefaultMessage();
errorsMap.put(fieldNameString, messageString);
});
return new ResponseEntity(errorsMap,HttpStatus.BAD_REQUEST);
}

@ExceptionHandler(Exception.class)
ResponseEntity GlobalExceptionHandler(Exception exception, WebRequest webRequest){
logger.info("inside GlobalExceptionHandler class");
ErrorDetails errorDetails =new ErrorDetails(new Date(),exception.getMessage(),webRequest.getDescription(false));
return new ResponseEntity(errorDetails,HttpStatus.BAD_REQUEST);
}

}

Я пробовал изменить RequestBody JSON, пробовал аннотацию @validated на уровне класса, а также на уровне метода после аннотации @RequestBody, но все равно получаю то же исключение.
Пожалуйста, помогите мне понять почему я получаю это исключение, пробовал играть с версиями зависимости проверки стартера весенней загрузки.
в настоящее время используется версия 3.0.4 зависимости проверки стартера
Версия Java 17.0.7

Подробнее здесь: https://stackoverflow.com/questions/761 ... dexception
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»