首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jersery Writer问题

Jersery Writer问题
EN

Stack Overflow用户
提问于 2014-08-27 11:00:59
回答 2查看 70关注 0票数 0

我已经为这个问题寻找了一段时间的答案,但似乎找不到正确的解决办法。我有一个服务,在该服务中,我调用Web资源如下:

代码语言:javascript
复制
@POST
@Path("/save")

public Response addPushMessage(@FormParam("key") String key, @FormParam("pid") String pid,  
                                    @FormParam("url") String url, @FormParam("message") String message) throws Throwable {
    if(key == null || key.isEmpty() || pid == null || pid.isEmpty())
            return Response.ok().entity("Error: image key and profile Id are required for push message").build();
    try{
         Date now = new Date();
         BasicDBObject pushMsg = new BasicDBObject("key", key).append("provider", pid).append("createdDate", now);
         if(url!= null)
             pushMsg.append("url", url);
         if(message != null && !message.isEmpty())
             pushMsg.append("message", message);
         pushMsg.append("status", status);
         String pushMsgId = ServiceUtil.mongo.put(GliifConstant.pushMsgCollectionName, pushMsg);

         // Notify Event manager to push events if it's PROD
         // Changed it delibrately to dev for local testing
         if(ServiceUtil.env.equalsIgnoreCase("dev")){
             PushEvent event = new PushEvent();
             event.setCreatedDate(now);
             event.setEventId(pushMsgId);
             event.setKey(key);
             event.setUrl(url);
             event.setStatus(status);
             WebResource clientResource = client.resource(pushURL);
             ClientResponse resp = clientResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, event);
        }
         if(pushMsgId != null)
             return Response.ok().entity("OK").build();
         else
             return Response.ok().entity("Error: save push notification failed").build(); 
    }
    catch(Throwable t){
        t.printStackTrace();
        logger.error(PushService.class.getSimpleName()+" addPushNotification() failed on key: " + key + " \n", t);
        return Response.status(GliifWebConstants.HTTP_GLIIF_SERVER_ERROR)
                    .header("HTTP_GLIIF_SERVER_ERROR","Gliif RestFull Service addPushNotification() operation caught runtime exception on saving push message on key:"+ key).build();
    }
}

"Push Event“类的代码:

代码语言:javascript
复制
public class PushEvent implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private String eventId = "";
private String key = null; //must have
private String url = "";
private String message = "";
private Date createdDate = null;
private int status = -1;


public String getKey() {
    return key;
}
public void setKey(String key) {
    this.key = key;
}
public String getUrl() {
    return url;
}
public void setUrl(String url) {
    this.url = url;
}
public String getMessage() {
    return message;
}
public void setMessage(String message) {
    this.message = message;
}
public String getEventId() {
    return eventId;
}
public void setEventId(String eventId) {
    this.eventId = eventId;
}
public Date getCreatedDate() {
    return createdDate;
}
public void setCreatedDate(Date createdDate) {
    this.createdDate = createdDate;
}
public int getStatus() {
    return status;
}
public void setStatus(int status) {
    this.status = status;
}

}

现在,当我运行这个程序时,我得到了一个错误:

未找到用于Java类型、类com.gliif.model.PushEvent**,和MIME媒体类型的消息体编写器** application/json**

我已经尝试了所有可能的方法来纠正这个问题,通过堆栈溢出论坛,但我是徒劳的。有人能帮我解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-27 16:16:49

我找到了解决办法。原来球衣的配置是错的。我所做的就是在代码中添加这些行,以创建jersey客户端。

代码语言:javascript
复制
DefaultClientConfig defaultClientConfig = new DefaultClientConfig();
defaultClientConfig.getClasses().add(JacksonJsonProvider.class);
Client client = Client.create(defaultClientConfig);

错误就解决了。谢谢查斯莫给我指明了正确的方向:)。

票数 0
EN

Stack Overflow用户

发布于 2014-08-27 11:09:13

您需要在项目中定义一个类,它为您的MessageBodyWriter类实现一个PushEvent。这可能看起来像这样。

代码语言:javascript
复制
@Provider
@Produces(MediaType.APPLICATION_JSON)
public final class PushEventWriter implements MessageBodyWriter<PushEvent> {

    // implement methods and serialization

}

在这个类中,您必须实现将PushEvent转换为JSON的方式。有了@Provider注释,泽西将找到这个作者并使用它,如果内容应该是JSON (因为@Produces注释的缘故)。

这里有一篇很好的博客文章描述了这个过程:http://programmingitch.blogspot.de/2014/03/creating-simple-jax-rs-messagebodywriter.html

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25525437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档