프밍일기

요청에 대한 JSON 응답 방법 본문

Spring

요청에 대한 JSON 응답 방법

스에조theLED 2017. 8. 21. 01:31

Spring에서 브라우저의 요청에 JSON 데이터로 응답하는 방법

▩ 공통적으로 pom.xml에 아래 코드 추가

		
		
		    org.codehaus.jackson
		    jackson-mapper-asl
		    1.9.13
		


■ @ResponseBody 어노테이션을 이용한 응답

Controller의 리턴타입 앞에 @ResponseBody 어노테이션 추가하고 리턴타입을 Map 이나 VO(DTO) 타입으로 설정

	@RequestMapping(value = "/json/responsebody", method = RequestMethod.GET)
	public @ResponseBody Map responseBodyJsonReturn(Model model) {

		logger.info("JSON Return by @ResponseBody");
		
		Map< String, Object > map = new HashMap< String, Object >();

		map.put("name", "Edward");
		map.put("age", "43");
		
		List< map< String, Object > > list = new ArrayList< map< String, Object > >();
		
		Map< String, Object > friends = new HashMap< String, Object >();
		friends.put("name", "wolf");
		friends.put("age", "44");
		list.add(friends);
		
		friends = new HashMap< String, Object >();
		friends.put("name", "min");
		friends.put("age", "39");
		list.add(friends);
		
		map.put("friends", list);
		
		return map;
	}



■ ViewResolver 설정을 이용한 응답

Servlet 설정파일에 다음 추가

		
			
			
				
			
		
		
			
		

3~5 라인은 JSON에 값이 없을때 "null"로 설정되는것을 빈문자("")로 변환하가 위한 CustomObjectMapper 구현



Controller에서 ModelAndView 객체의 ViewName을 "josnView" 로 설정하면 ModelAndView 에 세팅한 값들이 JSON 데이터로 리턴됨.

	@RequestMapping(value = "/json/jsonview", method = RequestMethod.GET)
	public ModelAndView jsonViewJsonReturn(HttpServletRequest req, HttpServletResponse res) {

		logger.info("JSON Return by jsonView");
		
		ModelAndView mav = new ModelAndView();
		
		String type = req.getParameter("type");

		mav.addObject("name", "Edward");
		
		if ("json".equals(type)) {
			mav.setViewName("jsonView");	// JSON 데이터를 응답
		} else {
			mav.setViewName("home");	// home.jsp를 응답
		}
		
		return mav;
	}

ViewName이 "jsonView" 가 아니면 JSON 데이타가 아닌 View로 JSP가 리턴됨. 즉, 하나의 요청에 대핸 경우에 따라서 JSON 또는 JSP를 선택하여 리턴할 수 있음.



※ JSON 응답시 "null" 을 빈문자("")로 변환하기 위한 CustomObjectMapper 구현

[ NullSerializer Class ]

public class NullSerializer extends JsonSerializer< Object > {
	
	@Override
	public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws JsonGenerationException, IOException {
		jgen.writeString("");
	}

}

[ CustomObjectMapper Class ]

public class CustomObjectMapper extends ObjectMapper {
	
	public CustomObjectMapper() {
		StdSerializerProvider sp = new StdSerializerProvider();
		sp.setNullValueSerializer(new NullSerializer());
		this.setSerializerProvider(sp);
	}
	
}





'Spring' 카테고리의 다른 글

파일업로드를 위한 설정 및 소스 정리  (0) 2018.08.18
개발 과 운영환경 분리를 위한 설정파일 분리적용 방법  (0) 2018.08.18
Spring과 MyBatis 연동 예제  (2) 2017.04.07
AOP - Annotation  (0) 2017.03.24
AOP - XML  (0) 2017.03.24
Comments