프로필사진
RESTful(6) - @ResponseBody써서 Json형태 객체로 반환해주기 + 상태값 설정

2019. 11. 26. 11:21🔴 Spring

300x250

<MemberListController.java>

package com.bitcamp.mm.member.controller;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.bitcamp.mm.member.domain.ListViewData;
import com.bitcamp.mm.member.domain.SearchParam;
import com.bitcamp.mm.member.service.MemberListService;

@Controller
public class MemberListController {

	@Autowired
	private MemberListService listservice;

	@RequestMapping("/member/memberList")
	public String memberList(
			@RequestParam(value = "p", defaultValue = "1") int pageNumber, 
			@RequestParam(value = "stype", required = false) String stype,
			@RequestParam(value = "keyword", required = false) String keyword,			
			Model model) {
		
		SearchParam searchParam = null;
		
		if(stype != null && keyword != null) {
			searchParam = new SearchParam();
			searchParam.setType(stype);
			searchParam.setKeyword(keyword);
		}
		
		// service
		ListViewData listdata = listservice.getListData(pageNumber, searchParam);
		System.out.println("전체 회원의 수 : "+ listdata.getTotalCount());

		/*
		 * for(MemberInfo m : listdata.getMemberList()) { System.out.println(m); }
		 */

		model.addAttribute("viewData", listdata);

		return "member/memberList";
	}
	
	// responsebody써서 Json형태 객체로 반환해주기 + 상태값 설정
	// 방법 1
	@RequestMapping("/member/memberListJson")
	public @ResponseBody ListViewData memberListJson(
			@RequestParam(value = "p", defaultValue = "1") int pageNumber, 
			@RequestParam(value = "stype", required = false) String stype,
			@RequestParam(value = "keyword", required = false) String keyword,
			HttpServletResponse response) {
		
		SearchParam searchParam = null;
		
		if(stype != null && keyword != null) {
			searchParam = new SearchParam();
			searchParam.setType(stype);
			searchParam.setKeyword(keyword);
		}
		
		// service
		ListViewData listdata = listservice.getListData(pageNumber, searchParam);
		System.out.println("전체 회원의 수 : "+ listdata.getTotalCount());
		
		// 상태값 설정
		//response.setStatus(HttpServletResponse.SC_OK); // = 200코드
		response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
		
		return listdata;
	}
	
	// 방법 2
	// 반환 타입이 ResponseEntity<T> : Spring 4.2이상
	// 반환하는 Body, statusCode, HttpHeader
	@RequestMapping("/member/memberListJson2")
	@ResponseBody 
	public ResponseEntity<ListViewData> memberListJson2(
			@RequestParam(value = "p", defaultValue = "1") int pageNumber, 
			@RequestParam(value = "stype", required = false) String stype,
			@RequestParam(value = "keyword", required = false) String keyword) {
		
		SearchParam searchParam = null;
		
		if(stype != null && keyword != null) {
			searchParam = new SearchParam();
			searchParam.setType(stype);
			searchParam.setKeyword(keyword);
		}
		
		// service
		ListViewData listdata = listservice.getListData(pageNumber, searchParam);
		System.out.println("전체 회원의 수 : "+ listdata.getTotalCount());
		
		// 응답할 때 상태코드 포함시켜서 넘김
		ResponseEntity<ListViewData> entity = new ResponseEntity<ListViewData>(listdata, HttpStatus.OK);
		
		return entity;
	}

}

방법 1 : @ResponseBody를 써서 Json형태로 반환해주었고, setStatus()를 통해 상태값을 설정해줬다.

방법 2 : 반환되는 데이터 타입을 ResponseEntity<T>에서 지정해줬고, 상태값은 응답할때 데이터와 함께 보낸다.

주요 상태코드로는 아래와 같이 있다 :

코드 설명
200  서버가 사용자의 요청에 정상적으로 처리함
400 사용자의 요청에 서버가 제대로 인식 못함
401 사용자가 서버의 자원을 요청할 권한이 없음
403 서버가 사용자의 요청을 거부하고 있음
404 사용자가 서버에 존재하지 않는 페이지에 대해 요청함
500 서버에 오류가 발생하여 요청을 수행할 수 없음
300x250