简体   繁体   English

Spring Jackson通过接口序列化

[英]Spring Jackson serialization by interface

I have two interfaces and one class: 我有两个接口和一个类:

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

}

I want return different values of UserEvent based on interface I returning from my controller. 我想根据我从控制器返回的接口返回不同的UserEvent值。 Like this: 像这样:

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

}

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

}

But it taking first implemented interface(in my case EventAttendee) and return it type from BOTH controlers. 但是它采用第一个实现的接口(在我的情况下为EventAttendee),然后从两个控制器返回其类型。

How can I return EventAttendee values from one controller, and UserAttendee from another? 如何从一个控制器返回EventAttendee值,从另一个控制器返回UserAttendee?

Ok, after I posted question I found answer... 好的,在我发布问题后,我找到了答案...

I used Views instead of interfaces. 我使用了Views而不是Interfaces。 There still interfaces in class, but it's serve for other needs now (not for Jackson). 课堂上仍然有接口,但是现在可以满足其他需求(不适用于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) {

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM