2017-07-16 3 views
1

Ich habe zwei Schnittstellen und eine Klasse:Frühling Jackson Serialisierung durch Schnittstelle

@JsonDeserialize(as = UserEvent.class) 
@JsonSerialize(as = EventAttendee.class) 
public interface EventAttendee { 

    Long getId(); 
    void setId(Long id); 

    User getUser(); 
    void setUser(User user); 

    UserResponse getUserResponse(); 
    void setUserResponse(UserResponse userResponse); 

} 

@JsonDeserialize(as = UserEvent.class) 
@JsonSerialize(as = UserAttendee.class) 
public interface UserAttendee { 

    Long getId(); 
    void setId(Long id); 

    Event getEvent(); 
    void setEvent(Event user); 

    UserResponse getUserResponse(); 
    void setUserResponse(UserResponse userResponse); 
} 

public class UserEvent extends BaseEntity implements EventAttendee, UserAttendee { 

    private Event event = new Event(); 
    private User user = new User(); 
    private UserResponse userResponse; 

} 

ich verschiedene Werte von Userevent basierend auf Schnittstelle zurückkehren will ich von meinem Controller zurück. Wie folgt aus:

public List<EventAttendee> getEventAttendees(@PathVariable Long eventId) { 

} 

public List<UserAttendee> getUserEvents(@PathVariable Long userId) { 

} 

Aber es Mitnahmen erste Schnittstelle implementiert (in meinem Fall EventAttendee) und schicken Sie es von beiden controlers geben.

Wie kann ich EventAttendee-Werte von einem Controller und UserAttendee von einem anderen zurückgeben?

Antwort

0

Ok, nachdem ich Frage gepostet fand ich die Antwort ...

Ich verwendete Ansichten anstelle von Schnittstellen. Es gibt immer noch Schnittstellen in der Klasse, aber es dient jetzt anderen Bedürfnissen (nicht für Jackson).

public class Views { 
    public interface UserResponse {} 
    public interface Event extends UserResponse {} 
    public interface User extends UserResponse {} 
} 

public class UserEvent extends BaseEntity implements EventAttendee, UserAttendee { 

    @JsonView(Views.User.class) 
    private Event event = new Event(); 

    @JsonView(Views.Event.class) 
    private User user = new User(); 

    @JsonView(Views.UserResponse.class) 
    private UserResponse userResponse; 
} 

@JsonView(Views.Event.class) 
public List<EventAttendee> getEventAttendees(@PathVariable Long eventId) { 

} 

@JsonView(Views.User.class) 
public List<UserAttendee> getUserEvents(@PathVariable Long userId) { 

} 
Verwandte Themen