본문 바로가기

Server Oriented/Spring

스프링 Controller Step 3, response 할당(View, RESTful)

(웹브라우저 주소창에 입력 및 실행되면)

결과를 웹브라우저에게 반환하는 것.

 

Controller .java 경로는 /src/main/java/도메인경로/controller/ 로 가정

View .html 경로는 /src/main/resources/templates/ 로 가정

 

크게 3가지인데,

A. 뷰 파일 호출 (1번과 2번)

B. 화면 전환 (2번에서 redirect)

C. JSON 객체 반환 (나머지 3~11번)


1. void

호출된 URL 과 동일한 뷰 파일 호출.

 

2. String

호출된 URL 을 처리한 Controller 에서 리턴한 뷰 파일 호출

 

3. JavaBeans Class

파일 대신에 Controller 에서 생성한 JSON 객체 반환

RESTful 에서 사용 ($.ajax 등등)

해당 컨트롤러 메소드에 @ResponseBody Annotation 기술 요망

 

4. Collection List

JSON 형식의 배열 객체 반환

 

5. Collection Map

JSON 형식의 Map 객체 반환

 

6. ResponseEntity<Void>

HTTP 헤더 정보와 내용을 가공하여 반환

 

7. ResponseEntity<String>

HTTP 헤더 정보와 문자열 데이타 반환

 

8. ResponseEntity<자바빈즈 클래스>

HTTP 헤더 정보와 JSON 형식의 자바빈즈 데이타 반환

 

9. ResponseEntity<List>

HTTP 헤더 정보와 Collection List 와 동등

 

10. ResponseEntity<Map>

HTTP 헤더 정보와 Collection Map 과 동등

 

11. ResponseEntity<byte[]>

HTTP 헤더 정보와 JSON 형식의 이진 데이타 반환

 


@GetMapping("/aaa")

public void methodA(){

...

}

브라우저 주소창에는 '/aaa' 표시,

뷰 파일은 /aaa.html.

 

@GetMapping("/aaa/bbb")

브라우저 주소창에는 '/aaa/bbb' 표시,

뷰 파일은 /aaa/bbb.html


@GetMapping("aaa")

public String methodA(){

  return "bbb";

}

브라우저 주소창에는 '/aaa' 표시,

뷰 파일은 /bbb.html

 

@GetMapping("/aaa/bbb")

return "ccc";

브라우저 주소창에는 '/aaa/bbb' 표시,

뷰 파일은 /ccc.html (/aaa/ 경로가 아니고, return 된 경로의 파일)

 

@GetMapping("/aaa/bbb")

return "ccc/ddd";

브라우저 주소창에는 '/aaa/bbb' 표시,

뷰 파일은 /ccc/ddd.html (/aaa/ 경로가 아니고, return 된 경로의 파일)

return 값에 "/ccc/ddd" 라고 해도 되지만,

실제로는 http://......com//ccc/ddd.html 으로 호출되므로 루트 표시로 '/' 를 사용하지 않는다.

 

return "redirect:/aaa/bbb";

redirect 를 사용하면 뷰 파일을 호출하는 것이 아니라,

해당 URL 을 호출하는 것이라서 브라우저 주소창에 '/aaa/bbb' 로 표시.

뷰 파일은 '/aaa/bbb' 에 매핑된 컨트롤러의 뷰 파일을 따름.


@ResponseBody

@GetMapping("...")

public 클래스명 methodA(){

  클래스명 인스턴스명 = new 클래스명();

  return 인스턴스명;

}

{클래스명에 대응하는 json 데이타}


@ResponseBody

@GetMapping("...")

public List<클래스명> methodA(){

  List<클래스명> list = new ArrayList<클래스명>();

  클래스명 인스턴스명1 = new 클래스명();

  list.add(인스턴스명1);

  클래스명 인스턴스명2 = new 클래스명();

  list.add(인스턴스명2);

  return list;

}

[{클래스명에 대응하는 json 데이타}, {...}, ...]


@ResponseBody

@GetMapping("...")

public Map<String,클래스명> methodA(){

  Map<string,클래스명> map = new HashMap<string,클래스명>();

  map.put("key1", 인스턴스명);

  return map;

}

{"key1":{ 클래스명에 대응하는 json 데이타 }, "key2":{...}, ...}


@ResponseBody

@GetMapping("...")

public ResponseEntity<Void> methodA(){

  return new ResponseEntity<Void>(HttpStatus.OK); // 200 OK

}

$.ajax 의 success:function(){...} 이 호출


@ResponseBody

@GetMapping("...")

public ResponseEntity<String> methodA(){

  return new ResponseEntity<String>("SUCCESS", HttpStatus.OK); // 200 OK

}

$.ajax 의 success:function(result){...} 이 호출되고, result 에 'SUCCESS' 문자열이 들어감


@ResponseBody

@GetMapping("...")

public ResponseEntity<자바빈즈 클래스> methodA(){

  클래스 인스턴스 = new 클래스();

  return new ResponseEntity<자바빈즈 클래스>(인스턴스, HttpStatus.OK); // 200 OK

}

$.ajax 의 success:function(result){...} 이 호출되고, result 에 JSON 형식의 인스턴스 내용이 들어감


@ResponseBody

@GetMapping("...")

public ResponseEntity<List<클래스>> methodA(){

  List<클래스> list = new ArrayList<클래스>();

  ...

  return new ResponseEntity<List<클래스>>(list, HttpStatus.OK); // 200 OK

}

$.ajax 의 success:function(result){...} 이 호출되고, result 에 JSON 형식의 List<Class> 내용이 들어감

[{클래스명에 대응하는 json 데이타}, {...}, ...]


@ResponseBody

@GetMapping("...")

public ResponseEntity<Map<클래스>> methodA(){

  Map<String, 클래스> map = new HashMap<String, 클래스>();

  ...

  return new ResponseEntity<Map<String, 클래스>>(map, HttpStatus.OK); // 200 OK

}

$.ajax 의 success:function(result){...} 이 호출되고, result 에 JSON 형식의 Map<String,클래스> 내용이 들어감

{"key1":{ 클래스명에 대응하는 json 데이타 }, "key2":{...}, ...}


@ResponseBody

@GetMapping("...")

public ResponseEntity<byte[]> methodA() throws Exception{

  ResponseEntity<byte[]> entity = null;

  try{

    HttpHeaders headers = new HttpHeaders();

    File file = new File("경로\파일명.확장자"); // 요즘 웹은 png (투명 이미지)대세

    headers.setContentType(MediaType.IMAGE_PNG);

    entity = new ResponseEntity<byte[]>(FileCopyUtils.copyToByteArray(file), headers, HttpStatus.CREATED);

  }catch(Exception e){

    entity = new ResponseEntity<byte[]>(HttpStatus.BAD_REQUEST); // 400 Error

  }finally{

  }

  return entity;

}

$.ajax 의 success:function(result){...} 이 호출되고, result 에 JSON 형식의 Map<String,클래스> 내용이 들어감

 

이미지가 아니면...

headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

headers.add("Content-Disposition","attachement;filename=\"경로"+

  new String(fileName.getBytes("UTF-8"),"ISO-8859-1")+"\"");