본문 바로가기

카테고리 없음

Spring boot reactive web controller 에서 payload 받기


form data 등 전송되는 정보는 model (dto, domain 등 객체로 받을 수 있음) 그외로..


1. 모든 (JSON) payload hashmap으로 받기

@PostMapping("/")
public void index(@RequestBody Map<String, Object> payload) {
System.out.println(payload);
}


2. 모든 Request 정보 확인

@GetMapping("/")
public void index(RequestEntity requestEntity){
System.out.println(requestEntity);
}

RequestEntity는 내부에 field로 method, url, type, headers, body 정보를 가지고 있으며 각 get method를 통해 얻어서 사용 할 수 있다.

=> form data는 처리 못하는 것 같다....?



3. Header, Body 정보 보기

@PostMapping("/")
public String postindex(HttpEntity httpEntity){
System.out.println(httpEntity);
return "index";
}

HttpEntity는 Request Entity 의 부모 객체로 headers 와 body정보를 가지고 있다.


4. ServerHttpRequest

@PostMapping("/")
public void postindex(ServerHttpRequest serverHttpRequest){
System.out.println(serverHttpRequest);
}

ServerHttpRequest (reactive) 객체는 body, header 및 많은 정보를 담고 있으나, body가 buffer의 형태로 그냥 읽을 수는 없었다.

parsing 되기 전의 정보인듯 하다.




file 전송: model 객체 안에 field로 multipartfile 을 가지고 있어도 바인딩 가능함.


5. Part (form file 전송)

@ResponseBody
@PostMapping("/")
public void postindex(@RequestPart Part a){
System.out.println(a);
}

파라미터나 body 에서 처럼 이름을 맞춰야 함.


6. MultiValuMap

@ResponseBody
@PostMapping("/")
public void postindex(@RequestBody MultiValueMap<String, Part> a){
System.out.println(a);
}

map안에 파일과 param 모두를 맏을 수 있음.

Mono나 Flux로 감싸서 받을 수 도 있음.. (debugger로 내용물을 보기가 힘듬)