GSON wypluwa za dużo danych

Odpowiedz Nowy wątek
2018-05-05 11:07
Złoty Szczur
0

Mam taki problem chce pobrać z bazy wszystkie elementy z bazy które dotyczą danego usera robie to tak

 User user = userRepository.findByUsername(u);
 List<XXX> xxxList = xxxRepository.findByPerson(user);

potem robie z tej listy Jsona

new Gson().toJson(xxxList);

i w wyniku dostaje to co chce ale poza tym dostaje całego usera (z id, hasłem, itp) ponieważ w encja xxx zawiera usera

moje pytanie dotyczy tego jak wywalić tego usera z jsona, i nie chodzi mi tu o to żeby przejść przez niego i wywalić pole user, ale aby to gson np pominął to pole

Pozostało 580 znaków

2018-05-05 11:33
Złoty Szczur
0

ok udało mi się

@Expose(serialize = false, deserialize = false)

oraz

GsonBuilder builder = new GsonBuilder();  
builder.excludeFieldsWithoutExposeAnnotation();  
Gson gson = builder.create();  

Pozostało 580 znaków

2018-05-05 11:59
0

Jeżeli używasz excludeFieldsWithoutExposeAnnotation(), to nie potrzebujesz korzystać z adnotacji @Expose(serialize = false, deserialize = false), żeby nie serializować pól. Musisz natomiast jej użyć na każdym polu, które ma być zserializowane - wystarczy samo @Expose wtedy. Żeby osiągnąć to, co chcesz po prostu użyj @Expose(serialize = false, deserialize = false) na polach, których nie chcesz i nie używaj excludeFieldsWithoutExposeAnnotation().

edytowany 1x, ostatnio: Michał Sikora, 2018-05-05 12:04

Pozostało 580 znaków

2018-05-05 12:00
Złoty Szczur
0

Michał Sikora, tak też zrobiłem chwile po napisaniu posta :), dzięki za feedback

Pozostało 580 znaków

2018-05-05 12:07
0

Oczywiście palnąłem gafę w poprzednim poście (Gson poraz kolejny uderza mnie swoim idiotycznym zachowaniem i przekonuje, żeby go nie używać). Jeżeli chcesz, żeby pola nie były serialziowane bez włączania excludeFieldsWithoutExposeAnnotation() na Gsonie pola powinny być transient. Przykładowo.

public class Test {
    public final int serialize;
    public final transient int dontSerialize;

    public Test(int serialize, int dontSerialize) {
        this.serialize = serialize;
        this.dontSerialize = dontSerialize;
    }
}

Pole dontSerialize nie wejdzie do JSONa.

Pozostało 580 znaków

2018-05-05 12:16
Złoty Szczur
0

próbowałem tak zrobić zanim stworzyłem tutaj temat, ale nie zadziałało jak należy, a właściwie wcale nie zadziałało, bo gdy dodałem transient to inne klasy się odzywały że nie mają jakiś problem bo nie mogą się dostać do tego pola, wiec zostaje wersja, że wszystkie pola z wyjątkiem usera oznaczem @Expose

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0