2-20 @GetMapping, @PostMapping (1)

서현우·2022년 5월 13일
1

스프링의정석

목록 보기
20/85

pom.xml

자바버전, 스프링버전 변경 가능.
수정 후 Maven - Update Project

	<properties>
		<java-version>11</java-version>
		<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>

servlet-context.xml

Controller에서 메서드가 단순히 GET방식으로 view로 URL 연결만 하고, 다른 하는 일이 없을 때
setvlet-context.xml에 view-controller로 등록해서 사용 가능.

	<!-- 실제 이름은 mvc:view-controller, view-controller는 GET요청만 허용함.POSTMAN으로 확인 가능. -->
	<view-controller path="/register/add" view-name="registerForm"/>

User.java

registerForm에서 입력받은 값을 user로 담는 역할.
getter/setter 생성 필요 -> EL에서 사용

package com.fastcampus.ch2;

public class User {
	private String id;
	private String pwd;
	private String name;
	private String email;
	private String birth;
	private String sns;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getBirth() {
		return birth;
	}
	public void setBirth(String birth) {
		this.birth = birth;
	}
	public String getSns() {
		return sns;
	}
	public void setSns(String sns) {
		this.sns = sns;
	}
	
	@Override
	public String toString() {
		return "User [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + ", birth=" + birth + ", sns="
				+ sns + "]";
	}
}

registerForm.jsp에 추가

<%@ page import="java.net.URLDecoder" %>

<!-- 컨트롤러 유효성 검사를 통과 못할 때, msg를 인코딩해서 URL로 보낸 값을 registerForm.jsp가 받아서 디코딩해서 출력한다. -->
<div id="msg" class="msg"> ${URLDecoder.decode(param.msg, "utf-8")} </div>

registerInfo.jsp에 추가

//param.id에서 user.id로 변경
<h1>id=${user.id}</h1>
<h1>pwd=${user.pwd}</h1>
<h1>name=${user.name}</h1>
<h1>email=${user.email}</h1>
<h1>birth=${user.birth}</h1>
<!-- 첫번째 방법은 EL paramValues.sns[0]배열로 값을 받음 -->
<!-- 두번째 방법인 user로 한번에 값을 받으면 이렇게만 써도 배열로 출력 가능 -->
<h1>sns=${user.sns}</h1>

RegisterController.java

package com.fastcampus.ch2;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class RegisterController {
//	@RequestMapping(value="/register/save", method={RequestMethod.GET, RequestMethod.POST})
//	@RequestMapping("/register/add")
//	@GetMapping("/register/add") //단순히 registerForm으로 이동만 시켜줌.
//	public String register() {	 //servlet-context.xml에서 view-controller 빈으로 등록 가능.
//		return "registerForm"; // WEB-INF/views/registerForm.jsp
//	}
	
//	@RequestMapping(value="/register/save", method=RequestMethod.POST) //쿼리스트링으로 회원가입 못 하게 막기.
	@PostMapping("/register/save") //위와 동일. Spring 4.3부터
	public String save(User user, Model m) throws Exception {
		//1. 유효성 검사
		if(!isValid(user)) {
			//Controller에서 URL을 직접 만들면 인코딩을 해 줄수 없음.
			String msg = URLEncoder.encode("id를 잘못입력하셨습니다.", "utf-8");
			
			m.addAttribute("msg", msg); //넘겨줄 값이 여러개면 이렇게 모델에 담아서 넘겨주면 됨.
			//but redirect는 재요청이므로 register/add로 모델을 보낼 수 없지만, Spring이 가능하게 해준다.
			return "redirect:/register/add"; 
			
			//위 두 줄과 같다.
//			return "redirect:/register/add?msg="+msg; //URL재작성(rewriting)
		}
	
		//2. DB에 신규회원 정보를 저장(뒤에 진도에서 수업함.)
        
		return "registerInfo";
	}

    private boolean isValid(User user) {
        return true;
    }
}
profile
안녕하세요!!

0개의 댓글