Spring

Spring Security Request method 'GET' not supported 에러

challnum 2023. 1. 27. 19:05

Spring Security를 활용하여 JWT를 구현하다 보니 html과 붙지 않는 오류를 발견했다 postman으로 값을 보낼 시 해쉬코드 암호화 하여 mysql에 잘 저장되었지만 local환경에서 실행해보니 Request method 'GET' not supported라는 에러를 발견했다.

에러의 구문은 다음과 같다.

2023-01-27 18:53:14.566 ERROR 19308 --- [nio-8080-exec-3] c.e.a.handler.GlobalExceptionHandler     : error

org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
    at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:253) ~[spring-webmvc-5.3.22.jar:5.3.22]

하지만 코드 내용 상에서는 PostMapping이었고 코드도 아래와 같았다. Spring에서도 Post로 보내고 있고 Ajax에서도 Post로 받고 있었다.

    @ApiOperation("회원 가입 기능")
    @PostMapping("/join")
    public Long join(@RequestBody MemberJoinRequestDto requestDto) {
        return memberService.join(requestDto);
    }
function sign_up() {
    // 회원 가입시 아이디, 비밀번호1,2, 이메일, 이름 정보 받기
    let username = $("#input-username").val()
    let password = $("#input-password").val()
    let password2 = $("#input-password2").val()
    let email = $("#input-email").val()
    let nickname = $("#input-nickname").val()

    // 중복 검사 했는지 안 했는지 is-success가 있으면 아이디 중복 확인한거다
    if ($("#help-id").hasClass("is-danger")) {
        alert("아이디를 다시 확인해주세요.")
        return;
    } else if (!$("#help-id").hasClass("is-success")) {
        alert("아이디 중복확인을 해주세요.")
        return;
    }

    if ($("#help-nickname").hasClass("is-danger")) {
        alert("닉네임을 다시 확인해주세요.")
        return;
    } else if (!$("#help-nickname").hasClass("is-success")) {
        alert("닉네임 중복확인을 해주세요.")
        return;
    }

    if ($("#help-email").hasClass("is-danger")) {
        alert("이메일을 다시 확인해주세요.")
        return;
    } else if (!$("#help-email").hasClass("is-success")) {
        alert("이메일 중복확인을 해주세요.")
        return;
    }

    // <------------------------------------- 비밀번호 확인 ------------------------------------->
    // 비밀번호1 입력 확인
    if (password == "") {
        $("#help-password").text("비밀번호를 입력해주세요.").removeClass("is-safe").addClass("is-danger")
        $("#input-password").focus()
        return;
    }
    // 비밀번호1 조건 확인
    else if (!is_password(password)) {
        $("#help-password").text("영문과 숫자 필수 포함, 특수문자(!@#$%^&*) 사용가능 8-20자").removeClass("is-safe").addClass("is-danger")
        $("#input-password").focus()
        return
    }
    // 비밍번호1 조건 충족
    else {
        $("#help-password").text("사용할 수 있는 비밀번호입니다.").removeClass("is-danger").addClass("is-success")
    }

    // 비밀번호2 입력확인
    if (password2 == "") {
        $("#help-password2").text("비밀번호를 입력해주세요.").removeClass("is-safe").addClass("is-danger")
        $("#input-password2").focus()
        return;
    }
    // 비밀번호1과 비밀번호 비교
    else if (password2 != password) {
        $("#help-password2").text(alert("비밀번호와 비밀번호 재입력 다릅니다")).removeClass("is-safe").addClass("is-danger")
        $("#input-password2").focus()
        return;
    }
    // 비밀번호2 조건 충족
    else {
        $("#help-password2").text("비밀번호가 일치합니다.").removeClass("is-danger").addClass("is-success")
    }
    $.ajax({
        type: "POST",
        url: "/join",
        // 저장된 유저 네임 페스워드를 서버로 회원가입한다고 요청
        data: JSON.stringify(
            {
                username: username,
                password: password,
                email: email,
                nickname: nickname
            }
        ),
        contentType: "application/json; charset=UTF-8",
        success: function (response) {
            alert("회원가입을 축하드립니다!")
            window.location.replace("/login.html")
        }
    });
}