반응형

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 대시보드 - 인프런 | 강의 (inflearn.com)

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com

요청 받기

1. PathVariable: @PathVariable

1
2
3
4
@GetMapping("/{userId}")
    public String findUser(@PathVariable String userId) {
    return "get userId: " + userId;
}
cs

2. QueryParameter: @RequestParam

1
2
3
4
5
6
7
8
@GetMapping("/search")
public ResponseEntity<Message> searchCourses(@RequestParam String keyword,
                                            @RequestParam String order,
                                            Pageable pageable){
    Page<CoursePreviewDto> result = courseService.searchCourses(keyword, order, pageable);
    message.setData(result.getContent());
    return new ResponseEntity<>(message, OK);
}
cs

Body와 Parameter가 동일할 경우 @RequestParam 제거 가능

1
2
3
4
5
6
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamV4(String username, int age) {
    log.info("username={}, age={}", username, age);
    return "ok";
}
cs

 

3. Header: @RequestHeader, HttpServletRequest.getHeader()

1
2
3
4
5
6
7
@RequestMapping("/headers")
public String headers(@RequestHeader MultiValueMap<StringString> headerMap,
                    @RequestHeader("host"String host){
    log.info("headerMap={}", headerMap);
    log.info("header host={}", host);
    return "ok";
}
cs
1
2
3
4
5
6
@GetMapping("/user")
public ResponseEntity<Message> getUserProfile(HttpServletRequest request){
    String jwtToken = request.getHeader("Authorization").replace("Bearer """);
    User user = userService.getUserFromJWT(jwtToken);
    return new ResponseEntity<>(message, message.getStatus());
}
cs

4. Body: @RequestBody

1
2
3
4
5
6
7
@PostMapping("/user")
public Map<StringString> updateProfile(@RequestBody Map<StringString> req){
    String nickname = req.get("nickname");
    int height = Integer.parseInt(req.get("height"));
    int weight = Integer.parseInt(req.get("weight"));
    return message;
}
cs

 

HttpServletRequest request

1. request.getParameter(): Query Parameter 조회

2. request.getHeader(): Header 조회

※ HttpServletRequest request.getParameter() == @RequestParam()

 

@Controller + return String 일 경우

return "~~~~"에 해당하는 View를 찾음.

String 자체를 return하고 싶다면 

1. @ResponseBody를 붙임

2. @Controller를 @RestController로 변경

 

Body와 Parameter가 일치할 경우 @RequestParam 제거 가능

1
2
3
4
5
6
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamV4(String username, int age) {
    log.info("username={}, age={}", username, age);
    return "ok";
}
cs

 

@RequestParam 옵션

1. required = true / false

2. defaultValue = "~~"

 

ModelAttribute: 데이터 한 번에 받을 수 있음

 

1
2
3
4
5
6
7
8
9
10
11
12
@Data
public class HelloData {
    private String username;
    private int age;
}
 
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData) {
    log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    return "ok";
}
cs

 

Body의 String 받기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    @PostMapping("/request-body-string-v1")
    public void requestBodyString(HttpServletRequest request, HttpServletResponse response) throws IOException {
        ServletInputStream inputStream = request.getInputStream();
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
 
        log.info("messageBody={}", messageBody);
        response.getWriter().write("ok");
    }
 
    @PostMapping("/request-body-string-v2")
    public void requestBodyStringV2(InputStream inputStream, Writer responseWriter) throws IOException {
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
 
        log.info("messageBody={}", messageBody);
        responseWriter.write("ok");
    }
 
    @PostMapping("/request-body-string-v3")
    public HttpEntity<String> requestBodyStringV3(HttpEntity<String> httpEntity) throws IOException {
        log.info("messageBody={}", httpEntity); // Http의 body를 String으로 변환해줌
        return new HttpEntity<>("ok");
    }
 
    @ResponseBody
    @PostMapping("/request-body-string-v4")
    public String requestBodyStringV3(@RequestBody String messageBody) throws IOException {
        log.info("messageBody={}", messageBody);
        return "ok";
    }
cs
반응형

+ Recent posts