본문 바로가기
study/spring boot

스프링 @RestController를 통한 json 데이터 반환

by eunoia_DB 2023. 4. 12.

스프링에서 주소값을 GetMapping 하기 위해 코드를 작성하면 다음과 같다.

 

@GetMapping("/")
public String restList() {
	return "home";
}

 

 

이렇게 @Controller는 단순히 jsp, html 같은 view 파일을 반환하기 때문에 Mapping을 통해 데이터를 가져오고

싶을 경우 @Controller가 아닌 @RestController를 사용해야 한다. 만약 @Controller를 사용하여 데이터를 받아

오고 싶을 경우 @RequestBody를 함께 사용하면 된다. @RestController는 Class path에 jackson이 존재할 경우

데이터 형식을 json 타입으로 불러올 수 있는데 이 때는 프로젝트에 의존성을 추가해야 한다.

 

 

Maven - pom.xml dependency 추가

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.13.3</version>
</dependency>

<dependency>
	<groupId>com.fasterxml.jackson.datatype</groupId>
	<artifactId>jackson-datatype-jsr310</artifactId>
	<version>2.13.3</version>
</dependency>

  

 

스프링에서 Ajax를 사용하여 반환되는 dataType이 json일 경우 @RestController를 통해 데이터를 받아올 수 있다.

이때 Ajax에 명시한 dataType과 @RestController의 반환 타입이 일치하지 않는 경우 오류가 발생할 수 있음으로

주의해야 한다.

 

본인의 경우 Ajax url 값을 @RestController의 GetMapping을 통해 값을 넘겼지만 실행 후

success: function - location.reload()가 작동하지 않았다. 그 이유는 RestController return 타입이 void였기

때문인데 dataType을 json으로 지정하면 json 형식으로 받아야 하기 때문에 반환값 자체가 없어서 발생한 오류였다.

이러한 경우 아예 타입을 지정하지 않거나 dataType을 text로 지정하면 오류가 발생하지 않는다. 왜냐하면 jquery가

RestController에서 반환되는 json 데이터를 MIME 타입에 따라 자동으로 데이터를 받기 때문이다.

 

 

@RestController를 통한 Json 데이터 받기

@RestController
public class HelloController {
	
	@GetMapping("/hello")
	public HashMap<String, String> hello() {
		HashMap<String, String> data = new HashMap<>();
		data.put("name", "홍길동");
		data.put("age", "30");
		data.put("addr", "서울시 마포구");
		data.put("hp", "010-1234-5678");
		return data;
	}
}

 

응답 결과 화면

댓글