jnk1m
Foliage IT
jnk1m
전체 방문자
오늘
어제
  • 분류 전체보기 (209)
    • Today I Learned (34)
    • Java (47)
    • Database (15)
    • [NHN Academy] (27)
    • Spring (47)
    • HTML + CSS + JavaScript (11)
    • JSP (3)
    • Node.js (10)
    • React Native (2)
    • 기타 (8)
    • 스크랩 (5)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
jnk1m

Foliage IT

Spring

[Spring] Day12 (Code2): pom.xml에 REST JSON 추가, REST JSON

2022. 4. 1. 02:35

pom.xml에 REST JSON 추가

<!-- REST JSON -->
		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-databind</artifactId>
		    <version>2.13.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml -->
		<dependency>
		    <groupId>com.fasterxml.jackson.dataformat</groupId>
		    <artifactId>jackson-dataformat-xml</artifactId>
		    <version>2.13.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
		<dependency>
		    <groupId>com.google.code.gson</groupId>
		    <artifactId>gson</artifactId>
		    <version>2.8.8</version>
		</dependency>

package com.board.controller;

import java.util.HashMap;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.board.domain.Person;

import lombok.extern.log4j.Log4j;


/*@RestCotroller 요청에 해당하는 순수 데이터만 반환해주는 컨트롤러임을 명시
 * produces 속성: 해당 메서드가 생산하는 데이터 MINE 타입
 * consumes 속성: 클라이언트가 요청 시 보내준 데이터의 타입 제약 걸기 05:08
 *  			  클라이언트가 데이터 보낼 때 Content-Type: "application/json" 명시해서 보내면 
 *   			  서버에서 consumes 속성에 "application/json" 작성해줘야 함. 
 * */
@RestController
@RequestMapping("/sample")
@Log4j
public class SampleController {

	@GetMapping(value="/getText", produces = "text/plain; charset=UTF-8") //여기서 생성된 일반 텍스트고 캐릭터셋은 utf-8이야
	public String getText() {
		log.info("getText 호출");
		log.info(MediaType.TEXT_PLAIN_VALUE);
		return "안녕하십니까";
	}
	
	
	//객체 데이터 응답
	@GetMapping(value="/getPerson", produces = { //옵션. 생략해도 됨
			MediaType.APPLICATION_JSON_UTF8_VALUE,
			MediaType.APPLICATION_XML_VALUE})
	public Person getPerson() {
		return new Person("피카츄", 10); //객체 리턴
	}
	
//	//List 데이터 응답
	@GetMapping(value="/getList")
	public List<Person> getList() {
		
		return IntStream.range(1, 10)
				.mapToObj(i -> new Person("name"+i, i))
				.collect(Collectors.toList()); 
	}
	
	//Map 데이터 응답
	@GetMapping(value="/getMap")
	public Map<String, Person> getMap(){
		Map<String, Person> map = new HashMap<String, Person>();
		map.put("one", new Person("그루트",3));
		map.put("two", new Person("로켓",23));
		return map;
	}
	
	//ResponseEntity: 데이터 + HTTP 헤더 상태 메세지 등
	@GetMapping(value="/hello", params= {"name", "age"}) //4:14
	public ResponseEntity<Person> hello(String name, Integer age){
		Person person = new Person(name,age);
		ResponseEntity<Person> result = null;
		if(age < 18) {
			result = ResponseEntity.status(HttpStatus.BAD_GATEWAY).body(person); //502에러
		}else {
			result = ResponseEntity.status(HttpStatus.OK).body(person);
		}
		return result;
	}
	
	//@PathVariable 예시
	//http://www.localhost:8080/sample/shop/shoes/1000113 REST 형식의
	//요청한거 받아줄때는 겟매핑으로 괄호 묶어서 저렇게 함. 주소 끝에는 슬래쉬 없다. 슬래쉬 있는건 REST 방식과 맞지 않다
	@GetMapping("/shop/{cat}/{pid}")
	public String [] getSource(
			@PathVariable("cat") String cat, //카테고리라는 뜻 / @PathVariable하면 자동으로 잡아줌
			@PathVariable("pid") Integer pid) {//프로덕트 아이디라는 뜻
		return new String[] {"category: "+ cat, "product id: "+pid};
	}
	
	//리퀘스트 바디 예시 
	//json으로 요청 시 데이터가 넘어왔을 때
	@PostMapping(value="/test", consumes="application/json")
	public Person test(@RequestBody Person person) {
		//처리를 했다고 치고 잘 넘어와서 객체로 바인딩되서 리턴이 되는지만 확인해볼 거
		return person;
	}
	

}

SampleController


package com.board.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor //모든 생성자 매개변수 있는 버전으로 초기화 
@NoArgsConstructor //기본 생성자 만들어줌 
public class Person {

	private String name;
	private Integer age;
}

person.java

    'Spring' 카테고리의 다른 글
    • [Spring] Day13 (Code): 댓글
    • [Spring] Day13 (Note): 댓글
    • [Spring] Day12 (Code1): 게시물 검색
    • [Spring] Day12 (Note): 게시판 검색, REST

    티스토리툴바