Jackson에서 fail_on_empty_beans를 어떻게 비활성화합니까?


100

jackson 2.1을 사용 fail_on_empty beans하여 오류 메시지가 비활성화하려는 것처럼 보이는 것을 어떻게 비활성화합니까?

나는 이것이 세상에서 가장 단순한 것이라고 가정하고 있지만 지옥이 늦었고 간단한 튜토리얼이나 .NET에서 특히 분명한 것을 찾을 수 없었습니다 api. SerializationFactory? 왜 그렇게 직관적이지 않게 만들고 오류 메시지를 그렇게 간단하게 보이게 만들까요?

내가 비록 오류 메시지처럼, 내 말은, 그것은 NPE보다 낫다.

나는 주석을 사용하여 이것을 할 수있는 방법이 있다고 가정하고있다. 그러나 나는 내가하고있는 단순한 작업을 위해 그것들을 전혀 사용하고 싶지 않다!

답변:


125

클래스별로 또는 전 세계적으로 이것을 할 수 있다고 믿습니다.

클래스마다 클래스 선언 위의 @JsonSerialize를 시도하십시오.

매퍼의 경우 한 가지 예가 있습니다.

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// do various things, perhaps:
String someJsonString = mapper.writeValueAsString(someClassInstance);
SomeClass someClassInstance = mapper.readValue(someJsonString, SomeClass.class)

아래의 StackOverflow 링크에는 Spring 프로젝트에 대한 예제도 있습니다.

Jersey를 사용한 REST의 경우 머리에서 처음부터 기억하지 못하지만 비슷하다고 생각합니다.


내가 파낸 링크 몇 개 : (코드 하우스 종료로 인해 첫 번째 링크 편집).


나는 오늘 일찍 이것을 사용했고, 예를 들어 자동 검색과 같은 더 많은 정보를 가지고 있습니다. stackoverflow.com/questions/4362104/…
Pancakeo

1
클래스 선언 @JsonSerialize에서 비활성화 하는 방법에 대한 예제를 제공 할 수 있습니까 FAIL_ON_EMPTY_BEANS?
tuk

2
몇 년 됐습니다 :). 도움이 될 수 있습니다 : stackoverflow.com/questions/12162413/…
Pancakeo

또는 당신은 "(SerializationFeature.FAIL_ON_EMPTY_BEANS) mapper.disable"와 같은 ObjectMapper 클래스의 비활성화 방법을 사용할 수 있습니다
Reddeiah Pidugu

43

Spring Boot를 사용하는 경우 application.properties 파일에서 다음 속성을 설정할 수 있습니다. spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = false


22

클래스에 공용 메서드 / 속성이 포함되어 있지 않은 경우에도 동일한 문제가 발생할 수 있습니다. 나는 일반적으로 API 요청 및 응답을위한 전용 DTO를 가지고 있으며 공개로 선언했지만 한 경우에는 메소드도 공개로 설정하는 것을 잊었습니다. 이로 인해 처음에는 "빈"빈이 발생했습니다.


13

클래스에 @JsonIgnoreProperties(ignoreUnknown=true)정의되지 않은 필드를 무시하도록 클래스에 주석을 달 수도 있습니다.


1
전체 빈이 실제로 null 인 경우 작동하지 않습니다
maryoush

12

추가 필드없이 JSON 개체를 얻으려면이 주석을 클래스에 추가하십시오. 저에게 완벽하게 작동했습니다.

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

이 행에 application.properties 파일을 추가 할 수도 있지만 JSON에 추가 필드가 추가됩니다.

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

스프링 부트 REST 앱의 컨트롤러 중 하나에서 JSON을 반환하려고했는데이 문제가 해결되었습니다.
ninjasense

빈 물건이 있다면 완벽한 방법!
Georgi Peev

3

org.codehaus.jackson.map.ObjectMapper를 사용하는 경우 pls. 다음 줄을 사용하십시오

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

3

Jersey Rest Services에서는 JacksonFeatures 주석을 사용하십시오.

@JacksonFeatures(serializationDisable = {SerializationFeature.FAIL_ON_EMPTY_BEANS})
public Response getSomething() {
    Object entity = doSomething();
    return Response.ok(entity).build();
}

1

제 경우에는이 오류를 일으키는 필드 중 하나에 @JsonProperty 주석을 작성하지 못했습니다.


1

여기에 다른 문제에 대한 솔루션을 추가하지만 동일한 오류로 나타나는 솔루션 ... 문자열 멤버에서 리터럴 큰 따옴표를 이스케이프하기 위해 즉석에서 json을 생성 할 때 (API 응답 등)주의하십시오. 자신의 잘못된 json을 소비하고있을 수 있습니다.


1

이 문제를 해결하려면 아래와 같이 JsonDataFormat 클래스를 구성하십시오.

ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

거의 동일합니다.

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

0
ObjectMapper mapper = new ObjectMapper();

안녕하세요,

내가 사용할 때 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)

내 json 객체 값이 ''응답에서 각도 페이지 의미의 공백

아래 설정의 도움으로 해결

mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker().
withFieldVisibility(JsonAutoDetect.Visibility.ANY).withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

0

제 경우에는 비활성화 할 필요가 없었습니다. 오히려이 코드를 내 수업 위에 두어야했습니다. (그리고 이것은 내 문제를 해결했습니다)

    @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)//this is what was added
    @Value //this was there already
    @Builder//this was there already

public class NameOfClass {
     //some code in here.
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.