Restlet POST表单通过JSON发送到客户端资源

时间:2012-06-09 14:28:16

标签: json google-app-engine post restlet

通过JSON将表单条目发送到另一个客户端资源时,我收到415错误。我的代码中的目标URI(“/ message”)在不使用表单时起作用(即用测试模拟对象点击“/ message”)。

这是我的代码,用于获取表单的值并将帖子发布到目标资源。我错过了一些需要做的事情吗?

我使用以下内容:

  • Restlet:2.1 RC5
  • GAE:1.6.1

Form Restlet:

@Post
public void handlePost(Representation entity) {

    final Form webForm = new Form(entity);
    MessageEntity newMessage = new MessageEntity();

    String subject = webForm.getFirstValue("subject");
    String sendto = webForm.getFirstValue("email");
    String message = webForm.getFirstValue("message");

    newMessage.setCategoryID(subject);
    newMessage.setAccountID(sendto);
    newMessage.setMessageText(message);

    ClientResource cr = new ClientResource(getRootRef()+ "/message");
    cr.post(newMessage, MediaType.APPLICATION_JSON);
}

目标资源(“/ message”)

   @Post("json")
   public void HandleRequest(MessageEntity messageEntity) {

   // Logic here

   }

如果您需要更多信息,请与我们联系

谢谢!

1 个答案:

答案 0 :(得分:1)

我的代码与您的代码非常相似,效果很好。我也在运行类似版本的Restlet和GAE。我的第一个问题是你的目标资源中是否存在其他@Post方法,因为有时排序很重要。

以下是我有两个版本的代码...... 1)

public Representation postHandler() {    
  Reference commitsRef = new Reference(Consts.RESOURCE_BASE + "commitments/");    
  ClientResource commitsResource = new ClientResource(getContext(), commitsRef);
  ....
  Representation commitsRep = commitsResource.post(commitForm);

即将表单发布到处理@Post(“json”)和@Post(“form”)的Target资源

2)

public Representation doPostFromGet() {   
  Reference takeActRef = new Reference(Consts.RESOURCE_BASE + "commitment/"
      + commitmentId + "/userActs/");     
  ClientResource takeActResource = new ClientResource(getContext(), takeActRef);
  ...
  Representation takeActRep = takeActResource.post(newAct);

即将Java对象发布到使用我称之为“Peierls magic”的表单。看到: http://tembrel.blogspot.com/2012/03/converting-forms-in-restlet-to-pojos.html 它允许你在Target中有一个post()并接受表单和pojos。

小调,如果您正在发帖添加新消息,那么网址应该是“/ messages /”(复数) - 也许某处有拼写错误? (不太可能,但我想我会提到它。)

祝你好运,

RB