Spring Ajax @ResponseBody ze zwracanymi wartościami null
Mam około pięćdziesięciu kontrolerów, które używają adnotacji @ResponseBody.
Podobne do tego:
@RequestMapping(value = "/someUrl.controller", method = RequestMethod.GET)
public @ResponseBody Object getObject(@RequestParam("id") Long id) {
Object object = provider.getObject(id);
return object;
}
Kilkakrotnie metoda getObject zwraca
null. Problem w tym, że po stronie klienta dostaję
pusta odpowiedź
Zamiast null .
We wstępnej implementacji mamy niestandardowy obiekt
JsonView, który działa jak opakowanie bez adnotacji @ResponseBody.
Podobne do tego:
@RequestMapping(value = "/someUrl.controller", method = RequestMethod.GET)
public JsonView<Object> getObject(@RequestParam("id") Long id) {
Object object = provider.getObject(id);
return new JsonView(object);
}
Więc wszystko poszło dobrze.
Znalazłem rozwiązanie w
Jak zastąpić zerowy serializator w Jackson 2.0?
https://coderoad.ru/18101506/
ale niestety działa to tylko dla pól w POJO.
Czy masz jakieś pomysły, jak sobie z tym poradzić?
Z góry dziękuję!
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
3 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Spring ma wspólny wzorzec, że jeśli metoda obsługi zwraca , oznacza to, że procedura obsługi już zajęła się tworzeniem i pisaniem odpowiedniej treści odpowiedzi i nie jest wymagana żadna dalsza akcja na froncie.
Spring zaimplementował ten wzorzec w swojej implementacji ( dla ). sprawdza, czy zwrócona wartość to . Ustawia żądanie jako przetworzone. Jeśli zwracana wartość nie jest , próbuje serializować ją za pomocą odpowiedniego .
Jedną z opcji jest utworzenie własnej adnotacji i odpowiedniej adnotacji , która robi to samo, ale obsługuje również . Pamiętaj, że niekoniecznie możesz ponownie użyć kodu z , ponieważ niektóre nie powiodą się podczas próby użycia .
Inną podobną opcją jest zastąpienie , aby zrobić (z powyższymi ograniczeniami) i zarejestruj go wyraźnie z , nadpisanie domyślnie Kod> HandlermethodReturnvalueHandler s. Musisz to zrobić uważnie (tj. Zarejestruj się tak samo), chyba że chcesz stracić funkcjonalność.
Najlepszym rozwiązaniem, IMO, byłoby nie zajmowanie się w treści odpowiedzi. Jeśli nic nie zwraca, wygląda to na 404. Ustaw odpowiedni kod odpowiedzi i voila!
Zawsze możesz wstrzyknąć do swojej metody obsługi i zrobić coś w rodzaju
Zakładając, że wiesz, że powinno to zostać serializowane do formatu JSON.
Anonimowy użytkownik
Potwierdzenie od:
W ten sposób Twój klient będzie mógł wiedzieć, kiedy pusty obiekt sprawdza stan odpowiedzi.
Jeśli naprawdę chcesz mieć wartość zwracaną null, możesz skonfigurować Jacksona, aby ją serializował (kod z
tkuty
https://stackoverflow.com/a/13876694/1979824
):
Mam nadzieję, że to ci pomoże.
Anonimowy użytkownik
Potwierdzenie od:
Zrób to jako standardowy kod. Spróbuj:
Mam doświadczenie z wysokiej jakości skanera, ten sposób pomoże uniknąć błędów wykrytych przez skaner. Jeśli chodzi o problem, możesz spróbować Transformer lub AddsCala (), aby zamiast tego wrócić POJO. Pobiegłem do tego nieszczęścia i umawiałem! Powodzenia.