
@RequiredArgsConstructor //final이 붙거나 @NotNull이 붙은 필드의 생성자 추가
@Service //빈으로 등록
public class BlogService {
private final BlogRepository blogRepository;
public List<Article> findAll() { // 블로그 글 전체 조회 메서드
return blogRepository.findAll();
}
}
@Getter
public class ArticleResponse {
private final String title;
private final String content;
public ArticleResponse(Article article){
this.title = article.getTitle();
this.content = article.getContent();
}
}
@RequiredArgsConstructor
@RestController //HTTP Response Body에 HTTP 응답으로 객체 데이터를 JSON 형식으로 반환
public class BlogApiController {
private final BlogService blogService;
@GetMapping("/api/articles")
public ResponseEntity<List<ArticleResponse>> findAllArticles() {
List<ArticleResponse> articles = blogService.findAll()
.stream()
.map(ArticleResponse::new)
.toList();
return ResponseEntity.ok()
.body(articles);
}
}
2025-07-31T21:40:15.363+09:00 ERROR 15788 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class me.nahyung.springboot3_developer.dto.ArticleResponse]] with root cause
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class me.nahyung.springboot3_developer.dto.ArticleResponse and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ImmutableCollections$ListN[0])
이렇게 에러가 떴으며,
postman으로 'http://localhost:8080/api/articles' 으로 GET요청을 보냈을 때에는,
{
"timestamp": "2025-07-31T12:41:11.464+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/api/articles"
}
라고 에러가 떴다. 잘 작성한 것 같은데 왜 에러가 나는지 이해가 안 갔다.
구글링 해보니
ArticleResponse에 직렬화할 프로퍼티가 하나도 없어서 에러를 던진것이었다.
그렇다. 내가 dto를 작성하면서 @Getter 애너테이션을 빼먹어서 생긴 오류였다.
내가 작성한 ArticleResponse dto에 getter이 있어야
JSON으로 변환이 되는데 이 getter를 빼먹어서 직렬화가 불가능한 것이었다.
이를 수정하고 test하니, 아주 잘 실행되었다.
해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주), 2023, 384쪽