반응형
package com.example.practice3.spring_exception.controller;
import com.example.practice3.spring_exception.dto.User;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api2")
@Validated
public class Api2Controller {
@GetMapping("/user")
public User user(
@RequestParam String name,
@RequestParam(required = true) int age
) {
// double a = 1 / 0;
User user = new User();
user.setName(name);
user.setAge(age);
return user;
}
@ExceptionHandler(value = MissingServletRequestParameterException.class)
public ResponseEntity methodArgumentNotValidException(MissingServletRequestParameterException manve) {
System.out.println("필수값을 보내주세요.");
System.out.println(manve.getBody());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("(controller)age값을 넣어서 보내주세요.");
}
}
package com.example.practice3.spring_exception.advice;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class ApiControllerAdvice {
....
@ExceptionHandler(value = MissingServletRequestParameterException.class)
public ResponseEntity methodArgumentNotValidException(MissingServletRequestParameterException manve) {
System.out.println("필수값을 보내주세요.");
System.out.println(manve.getBody());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("(advice)age값을 넣어서 보내주세요.");
}
}
age 파라미터 없이 보내서 에러 확인하기
컨트롤러 어드바이스보다 컨트롤러 body 에서 먼저 처리됨.
maven.getBody 가 인식이 안되었는데 버전 문제였음.
build.gradle 에서 3 버전으로 변경하니깐 해결됨.
3 버전으로 변경하고 난 후에
import javax.validation.constraints.*; (버전2) 로 되어있는 것을
import jakarta.validation.constraints.* (버전3) 로 바꿔줘야 함.
반응형
'Spring' 카테고리의 다른 글
[스프링] AOP (0) | 2023.07.06 |
---|---|
[스프링] @PathVariable, @RequestParam (0) | 2023.07.06 |
[스프링] Exception 처리하는 방법 (0) | 2023.07.05 |
[스프링] 검증 : annotation 생성 (0) | 2023.07.05 |
[스프링] 검증 : @validated @RequestParam (0) | 2023.07.05 |