通过JSON将表单条目发送到另一个客户端资源时,我收到415错误。我的代码中的目标URI(“/ message”)在不使用表单时起作用(即用测试模拟对象点击“/ message”)。
这是我的代码,用于获取表单的值并将帖子发布到目标资源。我错过了一些需要做的事情吗?
我使用以下内容:
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
}
如果您需要更多信息,请与我们联系
谢谢!
答案 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