스프링 공부하면서 form 이용해서 보내는 것 말고 어떤 식으로 데이터를 자바스크립트에서 스프링으로 보내는지 궁금해서 찾아보았다.
-> form 태그는 Get,Post 방식 뿐이 사용을 못한다
(x-www-form-urlencoded)
-> key=value 형태// ex. {username = dokun , email = dokun@gg.gg}
//@GetMapping
@PostMapping
public String home(String username,String email){ // key와 value가 매핑된다
System.out.println(username); // dokun
System.out.println(email); // dokun@gg.gg
return "home";
}
@Setter // setter가 없으면 object로 파싱이 불가능하다.
@Getter
class User {
private String username;
private String email;
private String age;
}
@PostMapping
public String home(User user){ // User object로 데이터를 받는다.
System.out.println(user.getUsername); // dokun
System.out.println(user.getEmail); // dokun@gg.gg
System.out.println(user.getAge); // null -> 값이 없으면 null로 받아진다.
return "home";
}
json 데이터의 경우 key=value가 아니기 때문에 Jackson 라이브러리의 @RequestBody
어노테이션을 이용해서 자바 오브젝트로 파싱한다.
json 형식 데이터
{
"username":"dokun",
"email":"dokun@gg.gg"
}
PostMapping("/home")
public String home(@RequestBody User user){
System.out.println(user.getUsername); // dokun
System.out.println(user.getEmail); // dokun@gg.gg
return "home";
}
<div class="container">
<form>
<div class="form-group">
<label for="username">유저네임</label>
<input type="text" id="username">
</div>
<div class="form-group">
<label for="email">이메일</label>
<input type="email" id="email">
</div>
</form>
<button id="join--submit" class="btn btn-primary">회원가입</button>
</div>
<script src="/js/join.js"></script>
$('#join--submit').on('click', function() {
let data = {
username : $('#username').val(),
password : $('#password').val(),
email : $('#email').val()
};
$.ajax({
type : 'POST',
url : '/user/join',
data : JSON.stringify(data),
contentType : 'application/json; charset=utf-8',
dataType : 'json'
}).done(function(r) {
if (r.statusCode == 200) {
console.log(r);
alert('회원가입 성공');
location.href = '/user/login';
} else {
if (r.msg == '아이디중복') {
console.log(r);
alert('아이디가 중복되었습니다.');
} else {
console.log(r);
alert('회원가입 실패');
}
}
}).fail(function(r) {
var message = JSON.parse(r.responseText);
console.log((message));
alert('서버 오류');
});
});
reference : https://getinthere.tistory.com/
계속 에러나서 이 글 저글 계속 뒤적거리다가 댓글 달아봅니다.
먼저, 문제는 React->자바스프링으로 데이터를 넘길 때 발생.
403 Forbidden이 발생합니다.
이 글처럼, PostMapping한 다음에 Postman으로 테스트해봤는데
데이터가 옮겨지는 것 이전에 Forbidden이 떠서 고통받고 있습니다.
이상하게 GetMapping은 또 정상적으로 동작하는 걸 보면....어...뭐가 문제인제 모르겠습니다.
며칠간 계속 해결이 안 되어 글 남깁니다.