Spring

[스프링] 예외처리 @ExceptionHandler

웨일파도 2023. 7. 5. 17:20
반응형
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