Korzystając z usługi Jackson 2.1, jak mogę wyłączyć to, fail_on_empty beans
że komunikat o błędzie wydaje się żądać ode mnie wyłączenia?
Zakładam, że to po prostu najprostsza rzecz na świecie, ale do diabła jest późno i nie udało mi się znaleźć prostego samouczka ani niczego szczególnie oczywistego z api
. SerializationFactory
? Dlaczego mieliby uczynić to tak nieintuicyjnym, a następnie sprawić, by komunikat o błędzie wydawał się tak prosty?
Chociaż zrobić jak komunikat o błędzie, to znaczy, że jest lepiej niż NPE.
Zakładam, że istnieje sposób, aby to zrobić za pomocą adnotacji - ale nie chcę ich wcale używać do uproszczonej pracy, którą wykonuję!
@JsonSerialize
do wyłączaniaFAIL_ON_EMPTY_BEANS
deklaracji klasy?Jeśli używasz Spring Boot, możesz ustawić następującą właściwość w pliku application.properties. spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = false
źródło
Możesz również uzyskać ten sam problem, jeśli twoja klasa nie zawiera żadnych publicznych metod / właściwości. Zwykle mam dedykowane DTO dla żądań i odpowiedzi API, zadeklarowane jako publiczne, ale w jednym przypadku zapomniałem również upublicznić metody - co spowodowało w pierwszej kolejności "pusty" bean.
źródło
Prawdopodobnie możesz również dodać do klasy adnotację,
@JsonIgnoreProperties(ignoreUnknown=true)
aby zignorować pola niezdefiniowane w klasieźródło
Jeśli chcesz uzyskać obiekt JSON bez dodatkowych pól - dodaj tę adnotację do swojej klasy, u mnie zadziałało idealnie.
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
Możesz również dodać ten wiersz do pliku application.properties, ale spowoduje to dodanie dodatkowego pola do pliku JSON.
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
źródło
Jeśli używasz org.codehaus.jackson.map.ObjectMapper, to pls. użyj następujących linii
mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
źródło
W Jersey Rest Services po prostu użyj adnotacji JacksonFeatures ...
@JacksonFeatures(serializationDisable = {SerializationFeature.FAIL_ON_EMPTY_BEANS}) public Response getSomething() { Object entity = doSomething(); return Response.ok(entity).build(); }
źródło
W moim przypadku nie napisałem adnotacji @JsonProperty w jednym z pól, które powodowało ten błąd.
źródło
Dodanie tutaj rozwiązania dla innego problemu, ale takiego, który objawia się tym samym błędem ... Zachowaj ostrożność podczas konstruowania json w locie (jako odpowiedzi API lub cokolwiek innego), aby uniknąć dosłownych podwójnych cudzysłowów w elementach łańcuchowych. Być może korzystasz z własnego, zniekształconego pliku json.
źródło
Aby rozwiązać ten problem, skonfiguruj klasę JsonDataFormat jak poniżej
ObjectMapper mapper = new ObjectMapper(); mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
co jest prawie równoważne z,
mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
źródło
ObjectMapper mapper = new ObjectMapper();
Cześć,
Kiedy używam
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
Moje wartości obiektu json są puste w odpowiedzi na oznaczenie strony kątowej
Rozwiązany za pomocą tylko poniższych ustawień
źródło
W moim przypadku nie musiałem go wyłączać, raczej musiałem umieścić ten kod na szczycie mojej klasy: (i to rozwiązało mój problem)
@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. }
źródło