728x90
문제 발생
<body>
<div class="container">
<div class="join">
<form id="join-form" action="/authentication/join" method="post">
<legend>Join</legend>
<div class="mb-3">
<label for="email" class="form-label">email</label>
<input type="email" id="email" class="form-control" name="email"
placeholder="이메일을 입력해주세요">
</div>
<div class="mb-3">
<label for="password" class="form-label">password</label>
<input type="password" id="password" class="form-control" name="password"
placeholder="비밀번호를 입력해주세요">
</div>
<div class="mb-3">
<label for="nickname" class="form-label">nickname</label>
<input type="text" id="nickname" class="form-control" name="nickname"
placeholder="닉네임을 입력해주세요">
</div>
<button type="submit" class="btn btn-primary">회원가입</button>
<a href="/">
<button type="button" class="btn btn-primary">뒤로가기</button>
</a>
</form>
</div>
</div>
</body>
@PostMapping("/join")
public String join(@RequestBody final @Valid JoinRequest request) {
log.info("email = {}, nickname = {}", request.getEmail(), request.getNickname());
try {
JoinResponse member = memberService.join(request);
} catch (DataIntegrityViolationException | OnlyUAppException e) {
throw new OnlyUAppException(ErrorCode.DUPLICATED_MEMBER_INFO,
ErrorCode.DUPLICATED_MEMBER_INFO.getMessage());
} finally {
return "redirect:/";
}
}
위와 같은 HTML, JAVA 코드를 작성하였을 때 아래와 같이 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported에러가 발생하였습니다.
이는 HTML form 코드가 'application/x-www-form-urlencoded' 형식으로 데이터를 전송하기 때문입니다.
JSON형식으로 데이터를 보내는 것이 아니기 때문에 위와 같이 에러가 발생하는 것입니다.
문제 해결 방법
문제 해결 방법 역시 간단합니다. @RequestBody만 제거하면 됩니다.
이후 혹시 바인딩이 안되고 있다면 해당 DTO에 @Setter를 추가해 주시면 됩니다.
@PostMapping("/join")
public String join(final @Valid JoinRequest request) {
log.info("email = {}, nickname = {}", request.getEmail(), request.getNickname());
try {
JoinResponse member = memberService.join(request);
} catch (DataIntegrityViolationException | OnlyUAppException e) {
throw new OnlyUAppException(ErrorCode.DUPLICATED_MEMBER_INFO,
ErrorCode.DUPLICATED_MEMBER_INFO.getMessage());
} finally {
return "redirect:/";
}
}
반응형