Restlet将带有Post(“ xml”)的422返回到DomRepresentation

时间:2018-10-31 05:47:29

标签: java xml restlet

我在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容器中。

1 个答案:

答案 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/>