Java Spring Jackson接口序列化

Java Spring Jackson接口序列化,java,json,spring,jackson,Java,Json,Spring,Jackson,我有两个接口和一个类: @JsonDeserialize(as = UserEvent.class) @JsonSerialize(as = EventAttendee.class) public interface EventAttendee { Long getId(); void setId(Long id); User getUser(); void setUser(User user); UserResponse getUserRespon

我有两个接口和一个类:

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

}
公共列表GetEventAttendes(@PathVariable Long eventId){
}
公共列表getUserEvents(@PathVariable Long userId){
}
但它使用第一个实现的接口(在我的例子中是EventAttendee)并从两个控件返回它的类型


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

好的,发布问题后,我找到了答案

我使用视图而不是接口。类中仍然有接口,但它现在可以满足其他需求(不适用于Jackson)

公共类视图{
公共接口用户响应{}
公共接口事件扩展UserResponse{}
公共接口用户扩展用户响应{}
}
公共类UserEvent扩展BaseEntity实现EventAttendee,UserAttendee{
@JsonView(Views.User.class)
私有事件=新事件();
@JsonView(Views.Event.class)
私有用户=新用户();
@JsonView(Views.UserResponse.class)
私有用户响应用户响应;
}
@JsonView(Views.Event.class)
公共列表GetEventAttendes(@PathVariable Long eventId){
}
@JsonView(Views.User.class)
公共列表getUserEvents(@PathVariable Long userId){
}

好的,在我发布问题后,我找到了答案

我使用视图而不是接口。类中仍然有接口,但它现在可以满足其他需求(不适用于Jackson)

公共类视图{
公共接口用户响应{}
公共接口事件扩展UserResponse{}
公共接口用户扩展用户响应{}
}
公共类UserEvent扩展BaseEntity实现EventAttendee,UserAttendee{
@JsonView(Views.User.class)
私有事件=新事件();
@JsonView(Views.Event.class)
私有用户=新用户();
@JsonView(Views.UserResponse.class)
私有用户响应用户响应;
}
@JsonView(Views.Event.class)
公共列表GetEventAttendes(@PathVariable Long eventId){
}
@JsonView(Views.User.class)
公共列表getUserEvents(@PathVariable Long userId){
}
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) {

}