다른 방식으로는 get, post, put, delete 요청이 다 가능한 Spring의 form:form 태그도 있다.
PostMapping("/home")
public String home(String username, String email){
return "home";
}
Spring은 key=value 형태의 데이터를 오브젝트로도 parsing해서 받아준다.
주의 점은 setter가 있어야 key=value 데이터를 스프링이 parsing해서 넣어 준다는 것
class User {
private String username;
private String password;
public String getUsername(){
return username;
}
public String getPassword(){
return password;
}
public void setUsername(String username){
this.username = username;
}
public void setPassword(String password){
this.password = password;
}
}
Setter 존재 시, 아래와 같이 parameter object 사용 가능
PostMapping("/home")
public String home(User user){
return "home";
}
{
"username":"hong",
"password":"1111"
}
해당 데이터는 스프링이 파싱해서 오브젝트로 받지 못하므로 @RequestBody 어노테이션을 이용해 MessageConverter 클래스를 구현한 Jackson 라이브러리가 불러 json 데이터를 자바 오브젝트로 파싱하여 받아준다.
PostMapping("/home")
public String home(@RequestBody User user){
return "home";
}
join.jsp
<div class="container">
<form>
<div class="form-group">
<label for="username">회원</label>
<input type="text" id="username">
</div>
<div class="form-group">
<label for="password">비밀번호</label>
<input type="password" id="password">
</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.js
<script>
$('#join--submit').on('click', function() {
var 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('서버 오류');
});
});
</script>
👍🏻