새소식

반응형
Java/Spring Boot

Form 태그 데이터 DTO 바인딩(Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported)

  • -
728x90
반응형

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 어노테이션을 제거하면 정상적으로 받아진다.

 

성공!

728x90
반응형

'Java > Spring Boot' 카테고리의 다른 글

@Controller, @RestController  (0) 2022.08.09
Thymeleaf th:text Date format  (0) 2022.06.15
Spring Boot Thymeleaf 설정  (0) 2022.05.31
@RequestBody 와 @ModelAttribute  (0) 2022.05.25
Thymeleaf Javascript 에서 ContextPath 가져오기  (0) 2022.05.18
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.