본문 바로가기

JAVA - Backend/SpringBoot - ApplicationFramework

[Refer] SpringWebMVC - Handler Methods

Spring Web MVC - Handler Methods

 

Web on Servlet Stack

This part of the reference documentation covers support for Servlet stack, WebSocket messaging that includes raw WebSocket interactions, WebSocket emulation through SockJS, and publish-subscribe messaging through STOMP as a sub-protocol over WebSocket. 4.1

docs.spring.io

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();