[英]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.