| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 특징및기본구조
- 스프링
- Java #자바 #초보개발자 #다형성 #동적바인딩 #instanceof #학습 #요약정리 #복습
- 프레임워크
- springframework
- JavaScript #자바스크립트 #복습 #배열 #Array
- Java
- 데이터매핑
- JavaScript #인라인 #인터널 #익스터널 #데이터입출력
- 데이터조회예제
- 서블릿기초 #servlet #java #webprogramming
- 정리
- Java #자바 #인터페이스 #implements #다형성 #interface #복습 #정리 #나만의공부
- List데이터조회
- Java #JDBC #Mybatis #동적SQL
- mybatis자료형 #참고자료
- 데이터베이스 #DataBase #Oracle #DB #DataBase개요
- 페이징처리예제
- WEB
- JavaScript #자바스크립트 #선택자 #HTML태그접근 #JS
- 동적sql
- 어노테이션
- JavaScript #예제 #복습 #Web #웹 #개발자가되고파ㅜㅜ
- 복습
- fremework
- mybatis
- JavaScript #선언적함수 #익명함수 #화살표함수 #함수선언방법 #복습
- Spring
- 예제
- Java #Web #공부 #복습 #Servlet #서블릿 #포워드 #sendRedirect #dispatcher
- Today
- Total
개발군싹
[Spring] 요청 데이터 매개변수를 이용한 데이터 맵핑 예제 본문
⭐ 매개변수 매핑 예제를 보기 앞서 Encoding Filter → SpringFramework에서 제공하는 필터 적용하기
➡️ 클라이언트의 요청이 WAS에 전달되고 POST방식으로 전달될 경우 인코딩 설정을 해주지 않으면 한글데이터가 깨지는것을 확인할 수 있다. 이전 Servlet / JSP이용 시 servlet마다 인코딩 설정을 하던가, ServletFilter를 이용하여 특정 페이지에 인코딩 필터를 씌우는 작업을 해보았다. 스프링에서 또한 EncodingFilter를 제공하기에 web.xml에 아래 코드를 등록해주면 된다.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern> // 모든 페이지는 EncodingFilter를 거쳐 전환
</filter-mapping>
클라이언트가 요청한 데이터를 매개변수와 매칭할 수 있다.
Demo.java (DTO) 예제 객체
package com.bs.spring.demo.model.dto;
import java.sql.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Demo {
private int devNo;
private String devName;
private int devAge;
private String devGender;
private String devEmail;
private String[] devLang;
private Date birthDay;
private Address address;
}
클라이언트의 화면에서 입력한 Input태그의 name값이 demoDTO객체의 필드명이 같다고 가정
ex)
<input type="text" name="devName" id="devname" placeholder="이름을 입력하세요" />
<input type="number" name="devAge" id="devage" />
<input type="text" name="devEmail" id="devemail" />
...
//클라이언트가 보낸 데이터를 매개변수와 매칭하여 전닳받기
//클라이언트가 보낸 데이터의 name값과 선언한 매개변수의 변수명이 동일해야한다.
@RequestMapping("/demo/demo.do")
public String demo2(String devName, int devAge, String devEmail, String devGender, String[] devLang) {
System.out.println(devName + devAge+ devEmail+ devGender+ Arrays.toString(devLang));
return "demo/demoResult";
}
➡️ 기본 매개변수부터 배열까지 알아서 매칭해서 데이터를 전달해준다. 단, 전달하는 name값과 Controller에서 매칭시키는 변수의 명이 같아야한다. (※ 필수 값을 받을 때 사용하면 좋다. (무조건 넘어오는 데이터 값))
🔥Input태그로 요청 데이터를 처리할 때 클라이언트가 값을 입력하지 않으면 BadRequest 에러가 발생한다.
(특히 int형의 경우 입력값이 없기 때문에 'NullPointerException' 발생할 수 있다.)
➡️ @RequestParam 어노테이션으로 해결할 수 있다.
@RequestMapping("/demo/demo.do")
public String requestParamTest(@RequestParam(value="devName" ) String name,
@RequestParam(value="devAge", defaultValue="10") int age,
@RequestParam(value="devEmail") String email,
@RequestParam(value="devGender", required=false) String gender,
@RequestParam(value="devLang", required=true) String[] lang, Model model ) {
➡️ 옵션 설정
- value : 입력될 데이터(클라이언트가 보낸 데이터의 name)
- default : 데이터가 입력되지 않았을 때 기본값
- required : 데이터 전달 필수 여부
클라이언트가 요청한 데이터의 name(key)과 DTO 필드명이 같은 객체 선언 시 springframework가 알아서 객체화 해준다. (데이터 가공의 편리성)
//DTO객체로 직접 클라이언트가 보낸 데이터 받기
//꼭! 클라이언트가 보낸 데이터의 key(name)값과 필드명이 일치해야한다.
@RequestMapping("/demo/demo.do")
public String commandMapping(Demo demo, Model m) {
System.out.println(demo);
m.addAttribute("demo", demo);
return "demo/demoResult";
}
➡️ 위 Demo(DTO)객체와 요청 데이터의 name값이 같다고 가정했을 경우 @RequestMapping() 메소드 매개변수로 DTO객체 선언 시 SpringFramework가 자동으로 데이터(객체)를 생성하여 만들어준다. (개발자가 new연산자를 사용하지 않고 객체 생성) ,, 편리함 그 자체 ~.~🤓
Spring에서 데이터를 저장할 수 있는 클래스 제공 (Model 클래스)
➡️ 생명주기가 HttpServletRequest와 동일하다.
- addAttribute() 메소드를 이용 addAttribute(key(String), value(Object));
- 어노테이션으로도 사용가능하다.
public String commandMapping(@ModelAttribute Demo demo, ...)
Map으로 클라이언트가 전송한 데이터 받기
//Map으로 받을 시 단일값에 대한 데이터만 정상적으로 처리, 다수값에 대해서는 1개의 데이터만 저장하게 되어있다.
@RequestMapping("/demo/demo.do")
public String demo5(@RequestParam Map param,String[] devLang,Model m) {
param.put("devLang", devLang);
System.out.println(param);
m.addAttribute("demo",param);
return "demo/demoResult";
}
➡️ DTO와 마찮가지로 Map을 매개변수로 선언 시 해당 name과 데이터를 'key:value'의 형식의 Map형태로 알아서 만들어준다. 단, 기본자료형에 대해서만 생성해주므로 checkBox와 같은 다중값의 데이터를 배열 형태로 받아와야 할 경우 이는 따로 매개변수를 매칭하여 저장받아야 한다.
🐔❓ ReqeustMapping 속성 중 method 속성을 이용하여 get,post 방식을 매칭시켜 메소드를 등록 할 수 있다.
@RequestMapping(value="/demo/demo.do", method=RequestMethod.POST)
public String commandMapping(@ModelAttribute Demo demo, Address address, Model m) {
demo.setAddress(address);
System.out.println(demo);
m.addAttribute("demo", demo);
return "demo/demoResult";
}
➡️ method 속성을 이용하여 해당 RequestMapping으로 설정된 메소드는 post방식으로 전달 시 수행도되록 설정 할 수 있다.
'Spring' 카테고리의 다른 글
| [Spring]Spring Security 암호화 (0) | 2023.12.12 |
|---|---|
| [Spring]MyBatis 연결/등록하기 (0) | 2023.12.12 |
| [Spring]@RequestMapping() (1) | 2023.12.10 |
| [Spring]Spring Bean? (0) | 2023.12.07 |
| [Spring]Spring이란? (1) | 2023.12.07 |