Spring Web MVC - Handler Methods
Arguments
getEvent(@PathVariable Integer id) : URI경로에서 가져옴 | @GetMapping("/events/{id}") |
getEvent(Model model) getEvent(ModelMap model) |
View에 전달할 객체 주입 model.addAttribute("key", value); |
getEvent(@RequestParam Map<String, String> params) | 파라미터를 <Key, Value> Map으로 바인딩 |
getEvent(@ModelAttribute Event event) | 특정객체(Event)에 파라미터 바인딩 |
BindingResult : 처리안하면 기본적으로 404에러 발생 | 바인딩 에러 처리 (@ModelAttribute Event e, BindingResult r) if(r.hasError()) { r.getAllErrors().forEach(c -> { log.info(c.toString()); }); } |
@Valid (그룹설정불가), @Validated (스프링 스펙) | 바인딩 후 검증작업 추가 (@Valid @ModelAttribute Event e) |
@SessionAttributes("page") : 단일 컨트롤러(클래스)범위 | 여러페이지에 있어서 객체를 공유할때 사용한다. SessionStatus를 폼처리 끝나고 세션을 비울 때 사용할 수 있다. |
getEvent(@SessionAttribute Integer id) | 컨트롤러 밖(인터셉터 또는 필터 등)에서 만들어준 세션 데이터 접근시 사용 |
getEvent(RedirectAttributes attributes) Ignore-default-model-on-redirect=false로 활성화 필요 요청된 곳에서는 @RequestParam or @ModelAttribute |
attributes.addAttribute : 리다이렉트시 데이터를 URI에 attributes.addFlashAttribute : 리다이렉트 전에 데이터를 세션에 저장하고 리다이렉트 요청 처리 즉시 제거한다. |
spring.servlet.multipart.xxx 설정 getEvent(@RequsetParam MultipartFile file) |
파일 업로드 구현시 사용 <form method="POST" enctype-"multipart/form-data" ... > |
getEvent(@RequestBody Event event) | 요청 본문 데이터를 HttpMessageConverter로 객체로 받는다. |
getEvent(HttpEntity<Event> request) | @RequestBody + 헤더정보까지 접근가능 |
@JsonView | https://www.youtube.com/watch?v=5QyXswB_Usg&t=188s |
PushBuilder | HTTP/2, Spring5 |
@ModelAttribute public void cate(Model model) {model.addAtribute()} @ModelAttribute("key") |
모델 정보 초기화 리턴 값을 모델에 담아준다. |
@InitBinder public void initEventBinder(WebDatabinder wdb) wdb.setDisallowedFields() 바인딩 설정 wdb.addCustomFormatter() 포매터 설정 wdb.addValidators() validator 설정 @InitBinder("event") 특정 모델에만 적용 |
특정 컨트롤러에서 바인딩 또는 검증 설정을 변경 |
@ExceptionHandler getEvent(EventException exception, Model model) |
특정 예외가 발생한 요청을 처리하는 핸들러 정의 throw new EventException(); |
@ControllerAdvice public class BaseController @RestControllerAdvice |
예외처리, 바인딩, 모델 객체를 모든 컨트롤러 전반에 걸쳐 적용할 경우 사용 밤위 지정 가능 @ControllerAdvice(assignableTypes={xxx.class, bbb.class}) |
Returns
파일 다운로드 구현시 ResponseEntity getEvent(){ resource = resourceLoader.getReasource("classpath: " + filename) file = resource.getFile(); mediaType = tika.detect(file); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION,"attachement; filename=\""+resource.getFilename()+"\"") .header(HttpHeaders.CONTENT_TYPE, "image/jpg") .header(HttpHeaders.CONTENT_LENGTH, file.lenght()+"") .body(resource); } |
파일종류(미디어 타입)알아내는 방법 http://tika.apache.org |
@ResponseBody | 메소드 리턴을 응답 본문에 담아줌 HttpMessageConverter사용 |
ResponseEntity<Event> getEvent() | return ResponseEntity.ok(event); return ResponseEntity.badRequest().build(); |