2017-07-16 57 views
1

我有两个接口和一个类:春杰克逊系列化通过接口

@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; 

} 

我想返回基于接口的,我从我的控制器返回UserEvent的不同值。就像这样:

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

} 

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

} 

但服用第一实现的接口(在我的情况EventAttendee),并返回它从两个controlers类型。

如何从一个控制器返回EventAttendee值,并从另一个控制器返回UserAttendee?

回答

0

好吧,在我发布问题后,我找到答案...

我用Views而不是接口。在课堂上仍然有接口,但它现在可以满足其他需求(不适用于杰克逊)。

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) { 

}