ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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>

     

     

Designed by Tistory.