1

这是带有 JAX-RS 注释的 POST 方法:

@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
public Response storeUser(User user) {

   boolean wasStored = JPAUserStore.storeUser(user);

   if (wasStored) {
      return Response.ok("User was stored.").build();
   } else {
      return Response.status(Status.BAD_REQUEST).build();   
   }

}

这是带有 JAXB 注释的 User 类:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public User {

  @XmlElement(name = "Name")
  protected String name;

  @XmlElement(name = "Address")
  protected String address;

  public void setName(String name) {
     this.name = name;
  }

  public String getName() {
     return this.name;
  }

  public void setAddress(String address) {
     this.address = address;
  }

  public String getAddress() {
     return this.address;
  }

}

REST Web 服务在 Jetty 上运行。当我发送内容类型为“application/xml”和此正文的请求消息(使用 RESTClient Firefox 插件)时

 <?xml version="1.0" encoding="UTF-8"?>
 <User>
    <Name>Max</Name>
    <Address>Main Street 12</Address>
 </User>

将向相应的资源返回 400 Bad 请求。根据日志,方法 JPAUserStore.storeUser(...) 未执行。

是什么原因,为什么@POST注解的方法不会被执行并返回OK?

4

1 回答 1

3

默认情况下,您的User类的根元素是user,您需要使用它@XmlRootElement(name="User")来匹配您的 XML 文档。

于 2013-04-06T02:13:24.933 回答