Spring Boot 에서 Form 태그를 사용하여 Post 방식으로 데이터를 넘길때 415 에러가 난다.
간단하게 테스트를 위해 Spring Boot + Thymeleaf 템플릿 엔진을 설정하여 진행하였다.
Controller
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value="/test")
public class TestController {
@GetMapping(value="/obo")
public String viewController(){
return "test";
}
@PostMapping(value="/vo")
@ResponseBody
public void testController(@RequestBody TestVO vo) {
System.out.println("name : "+vo.getName());
System.out.println("number : "+vo.getNumber());
}
}
@GetMapping 을 사용하여 아래의 test.html을 불러온다.
@PostMapping 이 test.html 안의 form 태그에서 보내는 데이터를 받는다.
html
<!DOCTYPE html>
<html xmlns:th="
http://www.thymeleaf.org">
<head>
<script th:inline="javascript">
</script>
</head>
<body>
<form action="/test/vo" method="POST">
<input type="text" id="name" name="name">
<input type="text" id="number" name="number">
<button type="submit">전달</button>
</form>
</body>
</html>
위 name 과 number 를 POST 메서드로 Body에 담아 전달한다.
VO
Controller에선 데이터가 Body 에 담겨 넘어오기 때문에 @RequestBody 어노테이션을 써 TestVO 라는 DTO로 받을예정이였다. 하지만 415 에러가 떴다.
이때 @RequestBody 어노테이션을 제거하면 정상적으로 받아진다.
성공!