我在Restlet EE应用程序中使用Resetlet ServerResource处理XML帖子。如果我用@Post注释并采用Representation参数,则text / xml和application / xml都将被接受。即使将批注更改为@Post(“ xml”),两种类型也都可以接受。如果我将参数更改为DomRepresentation,则拒绝application / xml并显示422状态代码和消息:
服务器了解请求实体的内容类型,并且请求实体的语法正确,但是无法处理所包含的指令
我正在用Postman进行测试,并且只是在原始XML(application / xml)和XML(text / xml)之间更改Body类型。 org.restlet.ext.xml.DomRepresentation处理documentation appears to indicate的APPLICATION_ALL_XML,APPLICATION_XML和TEXT_XML。
我想念什么?
这对两个都可以。
@Post
public Representation doPost(Representation entity) {
return entity;
}
这是
@Post("xml")
public Representation doPostXml(Representation entity) {
return entity;
}
返回422:
@Post("xml")
public Representation doPostXml(DomRepresentation entity) {
return entity;
}
DomRepresentation在发布为text,text / plain,text / xml和text / html类型但不作为application / xml类型时将接受xml文档。
我尝试了XmlRepresentation。
@Post
public Representation doPost(XmlRepresentation entity) {
return entity;
}
针对text / xml和application / xml的422失败。如果显示文字,则返回415,并显示以下消息:
服务器拒绝为请求提供服务,因为请求的实体的格式不受请求的方法所请求的资源支持。
使用Java 1.8将maven.restlet.com中的Restlet EE 2.3.12托管在Tomcat 8.5容器中。
答案 0 :(得分:0)
这是我要介绍的样品。请与您的代码和HTTP请求进行比较,看看有什么遗漏。
环境:JDK 1.8
编译器级别:Java 1.7
Jar文件:(1)org.restlet.ext.xml.jar(2)org.restlet.jar
以下是我尝试并成功运行的示例代码和HTTP请求。
代码:
package com.arzoo.resources;
import org.restlet.Server;
import org.restlet.data.Protocol;
import org.restlet.ext.xml.DomRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Post;
import org.restlet.resource.ServerResource;
public class TestXml extends ServerResource
{ public static void main(String[] args) throws Exception
{ // Create the HTTP server and listen on port 8182
new Server(Protocol.HTTP, 8182, TestXml.class).start();
}
@Post("xml")
public Representation doPostXml(DomRepresentation entity)
{ return entity;
}
}
来自命令行的HTTP请求:
~$ curl -i -H "Content-Type: application/xml" "http://localhost:8182" -d "<MyRoot/>"
HTTP响应:
HTTP/1.1 200 OK
Server: Restlet-Framework/2.3.12
Date: Fri, 09 Nov 2018 12:06:28 GMT
Transfer-encoding: chunked
Content-type: application/xml
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?><MyRoot/>