inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 기반 REST API 개발

Bad Request 응답

NoSerializer 에러가 뜹니다.

2137

CidYoon

작성한 질문수 2

0

아래와 같이 프로젝트에 적용 중입니다. Controller, Serializer 둘 다 sprigframework.validation의 Errors를 임포트하고 있습니다. 어떻게 해결해야할까요?

 

ErrorsSerializer

package com.kakaogame.queen.boysinthesharehouse.global.common;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.validation.Errors;

import java.io.IOException;

@JsonComponent
public class ErrorsSerializer extends JsonSerializer<Errors> {
@Override
public void serialize(Errors errors, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartArray();

errors.getFieldErrors().forEach(e -> {
try {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("field", e.getField());
jsonGenerator.writeStringField("objectName", e.getObjectName());
jsonGenerator.writeStringField("code", e.getCode());
jsonGenerator.writeStringField("defaultMessage", e.getDefaultMessage());
Object rejectedValue = e.getRejectedValue();
if (rejectedValue != null) {
jsonGenerator.writeStringField("rejectedValue", rejectedValue.toString());
}
jsonGenerator.writeEndObject();
} catch (IOException e1) {
e1.printStackTrace();
}
});

errors.getGlobalErrors().forEach(e -> {
try {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("objectName", e.getObjectName());
jsonGenerator.writeStringField("code", e.getCode());
jsonGenerator.writeStringField("defaultMessage", e.getDefaultMessage());
jsonGenerator.writeEndObject();
} catch (IOException e1) {
e1.printStackTrace();
}
});

jsonGenerator.writeEndArray();
}
}

 

PlayerController

@PutMapping("/{platformId}")
public ResponseEntity updatePlayer(@PathVariable Long platformId,
@RequestBody @Valid PlayerDto.UpdateRequest reqDto,
Errors errors) {

var optionalAccount = accountSearchService.getAccount(platformId);
if (optionalAccount.isEmpty())
return ResponseEntity.notFound().build();

if (errors.hasErrors())
return ResponseEntity.badRequest().body(errors);

var isSuccess = playerUpdateService.updatePlayer(optionalAccount.get(), reqDto);
var playerDto = new PlayerDto.UpdateResponse(isSuccess);
return ResponseEntity.ok(playerDto);
}

 

Error 메시지

org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.springframework.validation.DefaultMessageCodesResolver]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.validation.DefaultMessageCodesResolver and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: org.springframework.validation.BeanPropertyBindingResult["messageCodesResolver"])

 

----------------------------------------------------------------------------------------------------------------


ObjectMapper 를 AutoWired 해서 다음과 같이하면 실행되긴하네요 ㅠ

return ResponseEntity.badRequest().body(objectMapper.writeValueAsString(errors));

 

java spring rest-api

답변 2

3

박은지

같은 문제가 발생하여 디버깅 해보니

실제 json 데이터로  직렬화 하려는 부분은 errors 안의 errors 안에 있어 이벤트 컨트롤러에서 ResponseEntity의 body에 errors 를 담는 부분을 errors.getAllErrors() 로 변경하니 오류 없이 진행 되네요 

return ResponseEntity.badRequest().body(errors.getAllErrors());

0

백기선

No serializer found for class org.springframework.validation.DefaultMessageCodesResolver and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)

이 에러 메시지 발생하는 지점을 찾아 보시죠. 디버거를 써서 찾아보시고 어디서 왜 DefaultMessgeCodesResolver를 변환하려고 하는건지 찾아내야 할 것 같습니다.

Spring 시큐리티 관련해서 WebSecurityConfigurationAdapter

0

73

1

junit5 사용하시는 분들

0

88

1

자바 빈 스펙을 준수하는지 체크하는 테스트

0

238

2

REST API 개발 중 비즈니스 로직 적용 부분의 JSON 에러

0

243

1

스프링 부트 3버전에서의 실습

0

190

1

java.lang.AssertionError: Status

0

532

2

spring doc 관련 파일 생성 관련 배포 관련 질문 드립니다.

0

287

1

섹션2 201응답받기 부분 테스트 404에러 질문입니다

0

741

1

강의 자료가 404입니다 확인 부탁 드려요!

0

477

1

연동 DB문의

0

358

1

이벤트 Repository강의 중 Event 클래스에 private Integer Id; 위치 질문

0

505

1

(Mac) postgressql 관련하여 port kill 해도 다시 살아나는 경우

0

380

0

maven으로 생성한 docs파일(index.html)에서의 not found 오류 질문

0

621

1

테스트 오류 질문드립니다.

0

512

1

docs 요청값이 반영이 안되네요... (해결)

-1

394

1

psql 적용 후 에러

0

819

2

mvn package 시 다음과 같은 에러가 나시면

0

765

2

Event에 Account manager를 추가했으면 문서화 필요

0

274

1

2년 훨씬 전 부터 Restlet-> Talend API 로 바뀌었습니다~

1

473

1

asciidoc 추가 스니펫 에러 해결법

0

400

1

_links 는 현재 fieldWithPath 를 해주지 않아도 됩니다.

0

424

3

깃랩 처음 사용자를 위한 index.adoc raw 보는 법

0

332

1

eclipse 쓰시는 분을 위한 maven-resources-plugin 팁

0

333

1

부트 + jupiter 인 경우 설정법

0

342

1