Java Jersey RestAPI 用于从输入调用中检索 XML



我必须设计一个Jersey RestAPI,用户将使用application/xml将xml作为调用的一部分发布。例如,我的网站的 RestAPI 网址将被http://<mysite>/company/employee用户将从他们的 Web 服务调用以及一个 xml 作为application/xml

有人可以让我知道如何从我的泽西岛 RestAPI 代码中读取此 xml。我知道我必须使用@Consumes(MediaType.APPLICATION_XHTML_XML).但不确定如何从输入中检索 xml。

您有两个选择:

  1. 将有效负载"使用"为字符串,并使用 DOM 解析器或通过调用反序列化器(如 Jackson(来解析它。尽管完全有可能,但不太推荐这样做。

    @Path("employee")
    @POST
    @Consumes(MediaType.APPLICATION_XML)
    public Response postEmployee(String empXmlString) {
        // DO SOMETHING WITH THE XML (empString)...
        System.out.println(empString);        
        return Response.ok().build();
    } 
    
  2. 使用 JAX-RS 实体提供程序。

    对于 XML 有效负载,例如:

    <?xml version="1.0"?>
    <employee>
        <name>Riker</name>
        <id>2</id>
        <rank>Vice manager</rank>
    </employee>
    

    使用类似的东西:

    @Path("employee")
    @POST
    @Consumes(MediaType.APPLICATION_XML)
    @Produces(MediaType.TEXT_PLAIN)
    public Response postEmployee(Employee emp) {
        String empDetails = String.format("Entity - name: %s, id: %d, rank: %s", emp.name, emp.id, emp.rank);
        System.out.println(empDetails);
        return Response.ok().entity(empDetails).build();
    }
    @XmlRootElement
    public class Employee {
        @XmlElement public String name;
        @XmlElement public int id;
        @XmlElement public String rank;
        public Employee(String name, int id, String rank) {
            this.name = name;
            this.id = id;
            this.rank = rank;
        }
        public Employee() {
        }
    }
    

注意:

  • 可以使用自定义实体提供程序。查看 Jersey 文档中的 MessageBodyReader
  • 泽西岛用户指南真的很棒,使用它。
  • 阅读指南中的第 9 章 - 关于 Jersey 的序列化支持/插件("功能"(。
  • 泽西岛有很好的例子。参考jaxb示例,它对您来说将是一个很好的起点。

相关内容

最新更新