【发布时间】: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