3

使用 JAX-RS,我是否必须检查 JAXB 元素?

可以(应该)容器检查内容的有效性吗?

Item可以(应该)容器在调用 REST 方法之前在解组时自动响应 BAD_REQUEST吗?

当客户端发送不可编组(或空)内容时,容器可以(可能)响应 INTERNAL_SERVER_ERROR 吗?

@XmlRootElement
class Item {
}

@PUT
@Path("/items/{item_id: \\d+}")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response updateItem(@PathParam("item_id") final Long itemId,
                       final Item item) {

    assert itemId != null; // '\\d+'


    assert item != null; // is this make any sense?

    // is it ok to assert item is never null?
}

还有一个问题,怎么byte[]办?

@Consumes({MediaType.APPLICATION_OCTET_STREAM})
@PUT
@Path("/players/{player_id: \\d+}/picture");
public Response updatePicture(..., final byte[] bytes) {

    assert bytes != null;

   // is it ok to assert bytes won't be null even for an empty request body?

}

哎呀,我想我找到了答案。

http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-460004.2.4

当读取零长度请求实体时,所有实现提供的 MessageBodyReader 实现,除了与 JAXB 相关的实现,必须创建一个表示零长度数据的相应 Java 对象;他们不得返回 null。对于零长度请求实体,实现提供的JAXB MessageBodyReader 实现必须抛出 带有客户端错误响应 ( HTTP 400 )的 WebApplicationException 。

4

0 回答 0