弹簧杰克逊按接口序列化



>我有两个接口和一个类:

@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(并从两个控制器返回它的类型。

如何从一个控制器返回事件与会者值,从另一个控制器返回用户与会者值?

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

我使用了视图而不是接口。类中仍然有接口,但它现在服务于其他需求(不是杰克逊(。

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

最新更新