(웹브라우저 주소창에 입력 및 실행되면)
결과를 웹브라우저에게 반환하는 것.
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")+"\"");
'Server Oriented > Spring' 카테고리의 다른 글
스프링 build.gradle 수정후 반드시 실행 (0) | 2022.10.13 |
---|---|
스프링 Controller Step 2, request 파라미터 수용(매핑시) (0) | 2022.09.30 |
스프링 Controller Step 1, request 할당 (Annotation Mapping) (0) | 2022.09.28 |
스프링 Lombok Annotations, @Getter @Setter @ToString (0) | 2022.09.27 |
스프링 Annotation 속성 설정 (0) | 2022.09.27 |