希望将具体类连接到@POST
中REST服务器的blueprint.xml
方法的参数。
Jackson数据绑定找不到方法的send
参数的具体实现。
REST服务器具有一个send
方法,定义为:
public interface NotificationServer {
@POST
Response send(NotificationRequest notificationRequest);
}
NotificationRequest
也是一个接口:
public interface NotificationRequest {
名为NotificationServer
的{{1}}的具体实现实现了接口:
EmailNotificationServerImpl
public class EmailNotificationServerImpl implements NotificationServer {
@Override
public Response send(final NotificationRequest request) {
的相关部分包括:
blueprint.xml
Jackson错误消息:
原因:com.fasterxml.jackson.databind.JsonMappingException:无法构造NotificationRequest实例:抽象类型要么需要映射到具体类型,要么具有自定义反序列化器,或者包含其他类型信息
可以使用以下方法反序列化该类:
<bean class="EmailNotificationServerImpl" id="emailNotificationServerImpl">...</bean>
<bean class="NotificationRequestImpl" id="notificationRequestImpl" />
<service interface="NotificationRequest" ref="notificationRequestImpl" />
虽然可行,但并不能完全将实现与接口分离。
如何在@JsonDeserialize(as = NotificationRequestImpl.class)
public interface NotificationRequest {
中连接具体的实现,从而不需要blueprint.xml
注释?
答案 0 :(得分:1)
使用自定义提供程序,在<jaxrs:providers>
标记内扩展JAX-RS服务器定义中的JacksonJsonProvider。
或使用扩展StdSerializer的自定义反序列化器:
@JsonDeserialize(using = YourDeserializer.java)
或者使用多态性和@JsonTypeInfo
+ @JsonSubtypes
注释。