[Spring] Spring 클라이언트 데이터 처리

haram·2023년 6월 21일
0

URL로 들어오는 데이터 처리

@PathVariable

url경로에 변수를 사용하는 경우에 사용함

  • 코드예시
@RequestMapping("/{name}")
public String printName(@PathVariable String name, Model model ) {
	model.addAttribute("name", name);
	return "home";
}

@MatrixVariable

“/…/name=gildong;age=19/…/ 과 같이 url에 포함된 다중 피라미터를 사용하는 경우에 사용

  • dispatcher-servlet.xml에 아래와 같이 설정 추가
<annotation-driven enable-matrix-variables="true"/>
  • 코드예시
//url에 다중피라미터를 사용하는 경우 url=”/name=gilding;age=19”
@RequestMapping("/{user}")
public String printUser(
						@MatrixVariable(value="name", pathVar="user") String name,
						@MatrixVariable(value="age", pathVar="user") String age,
						Model model) {
	System.out.println(name);
	System.out.println(age);
	return "home";
}

// Map과 함께 사용하여 value를 따로 지정하지 않고 한번에 받기 가능
@RequestMapping("/{user}")
public String printUser(
						@MatrixVariable(pathVar="user") Map<String,String> param,
						Model model) {
	System.out.println(param.get("name"));
	System.out.println(param.get("age"));
	return "home";
}

@RequestParam

“/user?name=gildong” 와 같이 url경로에 “?”로 구분된 피라미터를 처리하기 위해 사용하는 방식

  • 코드예시
//url에 포함된 피라미터를 처리하는 가장 일반적인 방식 url= "/user?name=gildong"
@RequestMapping("/user")
public String Home(@RequestParam String name, Model model) {
	System.out.println(name);
	return "home";
}

@ModelAttribute

DTO객체를 생성하여 url쿼리로 넘어온 피라미터를 생성된 DTO객체에 자동으로 바인딩후 model에 추가함, jsp에서는 생성된 객체를 getter를 이용하여 사용

  • 코드예시
//url피라미터를 model에 DTO객체로 전달 url="/user?name=gildong&age=19"
@RequestMapping("/user")
// @ModelAttribute의 "user"속성은 model에 전달된 객체명임 따라서 jsp에서 사용시 ${user.getName()}과 같이 사용한다
public String Home(@ModelAttribute("user") HomeDTO user, Model model) {
		System.out.println(user.getName());
		System.out.println(user.getAge());
		return "home";
}

HTTP body로 들어오는 데이터 처리

http body데이터의 변환은 HttpMessageConverter을 이용하고, HttpMessageConverter은 변환할 데이터가 json, xml, string인지에 따라 여러 구현된 클래스가 존재한다.
http 헤더의 content-type 설정에 따라 변환을 진행할 HttpMessageConverter종류가 달라진다 이를 통하여 변환될 데이터의 종류를 지정 가능하다
예를들어 body의 내용을 json으로 변환하기 위해서는 content-type를 application/json으로 설정하면 MappingJacksonHttpMessageConverter클래스를 이용하여 json형태로 데이터를 변환한다.

@RequestBody

http request의 body내용을 HttpMessageConverter을 이용하여 자바 객체로 변환

  • MappingJacksonHttpMessageConverter을 이용하면 json데이터를 변환가능

@ResponseBody

http response의 body에 HttpMessageConverter을 이용하여 데이터 세팅

  • MappingJacksonHttpMessageConverter을 이용하면 json데이터를 변환가능
  • json형태의 데이터를 Map또는 DTO객체로 변환하기 위해 jackson라이브러리 pom.xml에 추가

    MappingJacksonHttpMessageConverter클래스 추가됨

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-databind</artifactId>
		    <version>2.14.2</version>
		</dependency>    
		<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
		<dependency>
		    <groupId>org.codehaus.jackson</groupId>
		    <artifactId>jackson-mapper-asl</artifactId>
		    <version>1.9.13</version>
		</dependency>
  • 코드예시
//http body내용을 객체로 받고 body 내용 세팅하기
@RequestMapping("/user")
public @ResponseBody HomeDTO Home(@RequestBody HomeDTO user) {
	HomeDTO dto = new HomeDTO();
	dto.setName(user.getName());
	dto.setAge(user.getAge());
	return dto;
}

0개의 댓글