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