[백엔드 - 스프링부트] 2025-01-06 12:08:59.129 WARN 13000 --- [nio-8080-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]
결론 : 혹시 본인이 ResponseEntity Return Class에 default constructor를 생성 안했는지 확인해보자
ResponseEntity<T>는 Spring에서 HTTP 응답을 커스터마이징할 수 있도록 제공하는 클래스이다
ResponseEntity<T>를 사용하면 MessageConverter와 ViewResolver 중 MessageConverter가 우선 동작하게 된다.
Spring MVC 란 무엇이며 어떻게 동작하나요
웹 애플리케이션 개발을 위한 모듈로 Model-View-Controller 패턴을 기반으로 동작합니다.
1. 클라이언트의 요청이 들어오면 `DispatcherServlet`이 가로챕니다.
2. DispatcherServlet은 `HandlerMapping`을 통해 요청 URL에 맞는 Controller를 찾습니다.
3. Controller는 사용자 요청을 처리하고 비즈니스 로직을 수행하거나 서비스 레이어에 위임합니다.
(그 후 - 전통적인 MVC 과정)
4. Controller는 View 이름(String)을 반환합니다
5. ViewResolver가 해당 View를 찾아서 렌더링을 합니다.
6. DispatcherServlet이 최종 응답을 반환하게 됩니다.
(그 후- REST API 응답 과정)
4. Controller는 DTO 객체를 반환합니다.
5. MessageConverter가 DTO를 JSON으로 변환합니다.
6. DispatcherServlet이 JSON 응답을 반한합니다.
@Controller와 @RestController의 차이점에 대해 설명해주세요
- @Controller는 전통적인 MVC 패턴에서 사용하는 어노테이션입니다. `뷰이름을 반환`하여 `View Resolver`가 실제 뷰 파일로 변환하는 역할을 진행합니다.
- @RestController는 RESTful 웹 서비스에서 사용하는 어노테이션입니다. @Controller에 `@ResponseBody가 결합`된 형태입니다. 이는 `메시지 컨버터(Message Converter)`가 클라이언트에게 적합한 형식으로 변환하여 응답 본문에 담아 반환합니다.
- Accept 헤더를 통해 클라이언트가 원하는 응답 형식을 명시적으로 요청할 수 있습니다.
Spring의 HttpMessageConverter는 요청(Request) 또는 응답(Response) 데이터를 변환하는 역할을 수행합니다.
요청 데이터를 Java 객체로 변환 (Deserialization) 하고, Java 객체를 JSON, XML 등의 포맷으로 변환(Serialization) 하게 됩니다.
- JSON => MappingJackson2HttpMessageConverter : application/json
- HTML 폼 => FormHttpMessageConverter : application/x-www.form-urlencoded
- Text => StringHttpMessageConverter : text/plain
- XML => Jaxb2RootElementHttpMessageConverter : application/xml, text/xml
- 바이너리 데이터 => ByteArrayHttpMessageConverter : application/octet-stream
클라이언트가 JSON 데이터를 요청하면 MessageConverter를 통해 JAVA 객체를 변환하게 됩니다.
Jackson(ObjectMapper) 등이 DTO를 객체로 변환할 때 기본 생성자가 필요합니다
[Grafana] prometheus 연동시 origin 에러 (0) | 2025.01.20 |
---|---|
[프론트앤드] Vite : process not defined, env 파일 읽기 (0) | 2025.01.20 |
[swagger] Failed to fetch. Possible Reasons: CORS, Network Failure, URL scheme must be "http" or "https" for CORS request (0) | 2024.12.31 |
[동시성 문제] 다양한 기법을 활용한 해결 방안 (0) | 2024.12.21 |
[쀼] Next-Auth redirect mismatch (0) | 2023.10.05 |