【问题标题】:Sending application/xml POST message to REST API doesn't work将应用程序/xml POST 消息发送到 REST API 不起作用
【发布时间】:2013-04-05 22:34:13
【问题描述】:

这是带有 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?

【问题讨论】:

  • 澄清一下,您是使用 Firefox 插件发送 POST 请求吗?如果是这样,我敢打赌这是请求 URI 的问题。您要发布到哪个 URI?
  • 同一资源还包含一个@GET 方法。 REST 客户端发送的 GET 消息返回 OK 和所需的 XML 代码,因此资源应该不是问题。
  • 您是否检查了storeUser 方法以了解它返回false 的原因?
  • 我已将返回状态 if wasStored = false 更改为其他状态,但仍然收到错误请求。
  • 您收到的状态为 400 的错误消息是什么?

标签: java rest post jaxb jax-rs


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2020-09-10
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多