• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

unsupported Post method [405 error]

23.07.23 23:30 작성 23.07.23 23:38 수정 조회수 690

0

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

섹션 5. 회원 웹 기능 -등록 을 수강하고 있습니다.

 

저는 VSCODE 로 IDE를 활용하고 있고, 코드서버를 쓰고 있습니다. 강의에서 배운 내용 그대로 코드를 쳤는데도 불구하고 위의 그림과 같이 Unsupported POST method 라고 뜹니다.

혹시 몰라서 마지막에 IDE 화면도 첨부했습니다.photo1.pngphoto2.png

package donghun.donghunspring.Controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import donghun.donghunspring.domain.Member;
import donghun.donghunspring.service.MemberService;

@Controller
public class MemberController {
    //memberService new 객체를 만드는 게 아니고, 연결 시켜줘야 한다 : 생성자 이용.
    private final MemberService memberService;

    //스프링이 뜰 때 Controller 에 service와 repository 연결한다. annotation 붙여 (service, repository)
    //연결하려면 service 와 repository 를 스프링 빈에 등록해야 하므로 service, repository 각각에 @Service, @repository 등록.
    //또는 직접 자바코드 작성하여 Bean 등록할 수 있음.
    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }

    
    @GetMapping("/members")
    public String membersForm(){
        return "members/mF";
    }
    
    @PostMapping("/members/new")
    public String create(MemberForm form){
        Member member = new Member();
        member.setName(form.getName());
        memberService.join(member);
        return "redirect:/";
    }
    @GetMapping("/members/new")
    public String createForm() {
        return "members/createMemberForm";
    }

    //post 방식으로 form 입력하므로 postmapping 이 선택된다.

}


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
template : createMemberForm.html //두 개의 코드가 첨부가 안되므로 절취선 이용해 붙이겠습니다.

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">

<body>
    <div class="container">
        <form action="/members/new" method="post">
            <div class="form-group">
                <label for="name">이름</label>
                <input type="text" id="name" name="name" placeholder="이름을 입력하세요">
            </div>
            <button type="submit">등록</button>
        </form>
    </div> <!-- /container -->
</body>
</html>

photo3.png

답변 2

·

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2023.07.26

안녕하세요. 김동훈님, 공식 서포터즈 OMG입니다. AI 답변에 더하여 답변 드립니다.

코드 서버라는 환경을 직접 경험해본 것은 아니여서 정확하지 않을 수 있지만 올려주신 코드와 패키지 등을 보았을 때 405에러가 발생할 이유는 없는 것 같습니다. 코드서버가 아닌 localhost (127.0.0.1)에서의 실행동작을 확인해봐야 알 것 같습니다.

 

수강생 분들에게 답변을 드리다보면 인텔리제이, 이클립스와 같은 IDE가 아닌 vscode 혹은 Web환경 (goorm IDE) 등에서 강의를 수강하며, 오류 발생에 대한 질문글을 올려주시곤 합니다. 이 때 해당 환경이 스프링부트 환경을 온전히 제공하지 못하여 발생한 경우도 종종 있었습니다. 강의에서 많은 수강생분들과 개발자들이 사용하는 환경이 아닌 경우 도움을 드리지 못하더라도 미리 양해 부탁드립니다^^!

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.25

안녕하세요, 인프런 AI 인턴이에요.

“Unsupported POST method” 에러는 일반적으로 HTTP 요청 메서드가 잘못된 경우 발생합니다. 이 경우, 해당 요청은 서버에서 지원하지 않는 POST 메서드를 사용하고 있기 때문에 에러가 발생하는 것입니다.

코드를 살펴보면, MemberController 클래스에는 @PostMapping 어노테이션이 없는 것으로 보입니다. 회원 등록 기능을 수행하는 메서드에는 @PostMapping 어노테이션을 추가해야 합니다. 예를 들어, 다음과 같이 코드를 수정하면 됩니다:

@PostMapping("/members/new")
public String create(MemberForm form) {
    // 회원 등록 로직
}

위의 코드는 회원 등록을 수행하는 POST 요청을 처리하는 메서드를 정의한 예시입니다. “/members/new” 경로로의 POST 요청을 처리할 수 있도록 @PostMapping 어노테이션을 추가했습니다. 실제로 회원 등록 처리를 하는 로직을 구현하셔야 합니다.

이렇게 코드를 수정하면, 지정한 경로(예: “/members/new”)에 POST 요청이 오면 해당 메서드가 실행되어 원하는 동작을 수행할 수 있을 것입니다.

해당 내용을 수정하고나서도 여전히 동일한 에러가 발생한다면, 다른 부분에서 문제가 발생하고 있을 수도 있으니 코드의 다른 부분도 검토해보시기 바랍니다. 또한, IDE 화면을 보여주셨지만 IDE가 직접적으로 에러를 발생시킬 원인은 아닐 수 있으니 참고용으로만 활용해주세요.

그리고 답변을 위해 코드의 일부분만 제공해주셨는데, 전체 코드나 스택 트레이스 등 추가 정보를 제공해주시면 더 정확한 도움을 드릴 수 있을 것입니다.

더 필요한 도움이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!