-
JPA & security (스프링 기본 파싱 전략spring boot 2023. 5. 10. 15:34
학습 목표
반드시 기억할 것은 HTML form 태그는 기본적으로 method 방식을 get, post만 지원한다.
1. 스프링 부트 컨트롤러는 key = value 데이터를 자동으로 파싱 해서 변수에 담아 준다.1. 스프링 부트 컨트롤러는 key = value 데이터를 자동으로 파싱 해서 변수에 담아 준다.
FORM 태그 METHOD -> get 처리
특징 : body 로 데이터를 담아 보내지 않음
form에 한계 get, post 가능
REST FULL API 활용 못하고 있음
PUT,DELETE - form 말고 같다 -->
ajax로 restfull 방식으로 변경해준다.
view/temp.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script> </head> <body> <div class="container"> <h1>form 태스트</h1> <form action="/temp/join2" method="post"> <div class="form-group"> <label for="">username : </label> <input type="text" name="username" class="form-control" value="항1"> </div> <div class="form-group"> <label for="" >password : </label> <input type="password" name="password" class="form-control" value="1234"> </div> <div class="form-group"> <label for="">email : </label> <input type="text" name="email" class="form-control" value="a@naver.com"> </div> <button id="join--submit" class="btn btn-primary" >회원가입</button> </form> </div> </body> </html>
1. 스프링 부트 컨트롤러는 key=value 데이터를 자동으로 파싱 해서 변수에 담아 준다.
package com.tenco.blog.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import com.tenco.blog.model.User; @Controller public class UserControllerTest { // 1. key=value @PostMapping("/temp/join") public String join(String username, String password, String email) { // 유효.. User reqUser = new User(); reqUser.setUsername(username); reqUser.setPassword(password); reqUser.setEmail(email); return "/index"; } // 1. Object Mapper 통해서 바로 객체로 파싱하기 @PostMapping("/temp/join2") public String join(User reqUser) { System.out.println(reqUser.toString()); return "/index"; } }
FORM 태그 METHOD -> get 처리
특징 : body 로 데이터를 담아 보내지 않음
FORM에 한계 GET, POST 가능
REST FULL API 활용 못하고 있음
PUT, DELETE - form 말고 같다 -->
ajax로 restfull 방식으로 변경해서 처리하기package com.tenco.blog.controller; import org.springframework.beans.factory.annotation.Autowired; 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.ResponseBody; import com.tenco.blog.model.User; import com.tenco.blog.repository.UserRepository; @Controller public class UserControllerTest { @Autowired private UserRepository userRepository; @GetMapping("/temp/index") public String indexPage() { return "/index"; } // 1. key=value @PostMapping("/temp/join") public String join(String username, String password, String email) { // 유효.. User reqUser = new User(); reqUser.setUsername(username); reqUser.setPassword(password); reqUser.setEmail(email); return "/index"; } // 1. Object Mapper 통해서 바로 객체로 파싱하기 @PostMapping("/temp/join2") @ResponseBody // 페이지 리턴이 아니라 데이터를 리턴 하라 명령 public User join(@RequestBody User reqUser) { System.out.println(reqUser.toString()); userRepository.save(reqUser); return reqUser; } }
여기서 @ResponseBody를 설정 안해주면 데이터 반환 해주는 애가 없기 때문에
@ResponseBody 어노테이션과 @RequestBody를 선언해줌으로 데이터가 반환되게 해준다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script> </head> <body> <div class="container"> <h1>form 태스트</h1> <form action="/temp/join2" method="post"> <div class="form-group"> <label for="username">username : </label> <input type="text" name="username" id="username" class="form-control" value="항1"> </div> <div class="form-group"> <label for="password" >password : </label> <input type="password" name="password" id="password" class="form-control" value="1234"> </div> <div class="form-group"> <label for="email">email : </label> <input type="text" name="email" class="form-control" id="email" value="a@naver.com"> </div> </form> <button id="join--submit" class="btn btn-primary" >회원가입</button> </div> <script type="text/javascript"> $(document).ready(function() { $("#join--submit").on("click", () => { // MIME TYPE -> application/json // js --> json 문자열로 변경하는 방법 // object --> JSON 문자열로 변경 let data = { username: $("#username").val(), password: $("#password").val(), email: $("#email").val() }; //console.log(JSON.stringify(data)); $.ajax({ type: 'POST', url : '/temp/join2', contentType: 'application/json; charset=utf-8', data: JSON.stringify(data), dataType: 'json' }).done(function(response) { console.log(response); console.log(typeof response); alert("회원가입성공"); location.href = "/temp/index"; }).fail(function(error) { alert("서버오류"); }); }); }); </script> </body> </html>
'spring boot' 카테고리의 다른 글
JPA & Security - 18 (시큐리티 사용 및 로그인 페이지 커스텀 ) (0) 2023.05.15 JPA & Security - 17 (시큐리티 사용전 주소 설계 확인) (0) 2023.05.11 JPA & Security (예외처리) (0) 2023.05.10 JPA & security (update, delete, 더티체킹) (0) 2023.05.10 JPA 페이징 사용해보기 (0) 2023.05.10