GSON wypluwa za dużo danych

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

0

ok udało mi się

@Expose(serialize = false, deserialize = false)

oraz

GsonBuilder builder = new GsonBuilder();  
builder.excludeFieldsWithoutExposeAnnotation();  
Gson gson = builder.create();  
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().

0

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

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.

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

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