pooney
article thumbnail

Spring 사용시 ajax를 사용하는 경우가 많이 발생한다 이때 데이터를 text로 받을 수도 있지만 json으로 받아야하는 경우도 발생한다 이때 우리가 알아야하는 하는것은 @ResponseBody , @RestController이다

 

 

 

@RestController 와 @controller 의 차이 

 

@controller 

일반적으로 View를 전달하기 위해 사용한다 

 

@RestController 

일반적으로 Rest full api를 구성하고 할때 사용하는 어노테이션으로 데이터를 전달하고자 할때 사용한다. 해당 어노테이션은 스프링 4점대부터 사용가능하며 이전 버전에서는 @responsebody를 통해서 데이터를 전달했다. 

 

 

 

 

ajax를 사용시 json형식으로 데이터 받기

 

pom.xml

 

jackson을 추가해야 데이터를 json 형태로 변환해서 전달 가능하다.

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-databind</artifactId>

    <version>2.1.1</version>

</dependency>

 

 

 

index.jsp

url  요청 url 
type 어떠한 형식으로 데이터를 요청할 것인가
data 내가 전달하고자 하는 데이터
dataType 서버로 부터 어떠한 데이터를 받을 건인가를 정한다 
success 정상적으로 서버가 응답했을 경우 실행 
error 정상적으로 서버가 응답하지 못했경우 실행

 

 $.ajax({
       url: "요청 url",
       type: "get",
       contentType: "application/json; charset=utf-8;",
       dataType : "json",
       success: function(result){
       	console.log(result)
       }	
})

 

 

 

 

controller 

아래는 @RestContrller 아닌 @ResponseBody를 사용했다. 그리고 Map ,List 와 같은 컬렉션을 사용하여 return 한다 또는 json을 생성하여 return 해도 된다 json 생성 방법은 아래에 작성

@ResponseBody
@RequestMapping("test")
public Map<String, String> test(){
    
    Map<String,String> map = new HashMap<String, String>();
    map.put("msg", "성공")
    
    return map;
}

 

결과 

아래와 같은 결과를 출력하게 된다. 

 

 

 

 

 

 

json을 생성하여 데이터 받기 

 

전달받고자하는 json 형식

[{
    "id": 1,
    "msg": "1번 성공",
    
  }, {
    "id": 2,
    "msg": "2번 성공",
   
  ]}

 

 

controller 

@ResponseBody
@RequestMapping(value="calendar/{tbno}" , method=RequestMethod.GET)
public JSONArray getCalendar(@PathVariable String tbno) {
		
        JSONObject ob = new JSONObject();
		ob.put("id", 1);
		ob.put("msg", "1번 성공");
		
		JSONObject ob2 = new JSONObject();
		ob2.put("id", 2);
		ob2.put("msg", "2번 성공");
		
		JSONArray array = new JSONArray();
		array.add(ob);
		array.add(ob2);
		
		return array;
}
	

 

결과 

 

정상적으로 json 데이터를 받아오는 것을 확인 할 수 있다.

 

profile

pooney

@pooney

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!