그라가승훈
[유튜브-메타코딩] - 나만의 블로그 만들기 - 8. Json 데이터로 통신하기 본문
- 파싱 전략 key=value → 파라미터
- 스프링 컨트롤러는 key=value 데이터를 자동으로 파싱 하여 변수에 담아준다.
- get요청은 key=value이고 post요청중에 x-www-form-urlencoded (form태그를 만들어서 데이터 전송) 시에도 key=value 이기 때문에 이러한 데이터는 아래와 같이 함수의 파라미터로 받을 수 있다.
PostMapping("/home")
public String home(String username, String email){
return "home";
}
- 파싱 전략 key=value → 오브젝트 (Setter 필요)
- 스프링은 key=value 형태의 데이터를 오브젝트로 파싱해서 받아주는 역할도 한다.
- 주의할 점은 setter가 없으면 key=value 데이터를 스프링이 파싱 해서 넣어주지 못한다.
class User {
private String username;
private String password;
// Getter
public String getUsername(){
return username;
}
public String getPassword(){
return password;
}
// Setter
public void setUsername(String username){
this.username = username;
}
public void setPassword(String password){
this.password = password;
}
}
PostMapping("/home")
public String home(User user){
return "home";
}
- key=value가 아닌 데이터 파싱
- json 데이터나 일반 text데이터는 스프링 컨트롤러에서 받기 위해서는 @RequestBody 어노테이션이 필요하다.
- @RequestBody 어노테이션을 붙이면 MessageConverter 클래스를 구현한 Jackson 라이브러리가 발동하면서 json 데이터를 자바 오브젝트로 파싱하여 받아준다.
PostMapping("/home")
public String home(@RequestBody User user){
return "home";
}
- ajax 통신 json데이터 요청 방법
- key=value 데이터가 아닌 json데이터 전송방법
- 밑의 코드를 보면 username, password, email을 data 오브젝트로 묶고 ajax 요청을 한다.
- ajax 요청의 JSON.stringify(data) 함수로 JavaScript Object를 json으로 변경하여 요청.
- 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>
'Spring' 카테고리의 다른 글
[유튜브-메타코딩] - 나만의 블로그 만들기 - 10. 회원가입을 위한 기초세팅 (0) | 2022.08.21 |
---|---|
[유튜브-메타코딩] - 나만의 블로그 만들기 - 9. 화면구현(부트스트랩) (0) | 2022.08.16 |
[유튜브-메타코딩] - 나만의 블로그 만들기 - 7. 더미 데이터로 테스트 (0) | 2022.08.11 |
[유튜브-메타코딩] - 나만의 블로그 만들기 - 6. Blog 테이블 만들기 (User, Board, Reply) (0) | 2022.08.10 |
[유튜브-메타코딩] - 나만의 블로그 만들기 - 5. Yaml(야믈), yml 설정 (JSP 파일 연동) (0) | 2022.08.09 |
Comments