JAX-RS 中必需的@QueryParam(以及在没有这些功能时该怎么办)
我使用 RESTEasy JAX-RS 实现将 Web 服务组件部署到 JBoss Application Server 7。
是否有注释可用于在 JAX-RS 中声明必需的、必需@QueryParam参数?如果不是,处理缺少这些参数的情况的“标准”方法是什么?
我的 Web 服务(资源)方法在正确调用所有必需参数时会返回 JSON 字符串化结果,但我不确定向调用方指示缺少必需参数的最佳方式是什么。
我使用 RESTEasy JAX-RS 实现将 Web 服务组件部署到 JBoss Application Server 7。
是否有注释可用于在 JAX-RS 中声明必需的、必需@QueryParam参数?如果不是,处理缺少这些参数的情况的“标准”方法是什么?
我的 Web 服务(资源)方法在正确调用所有必需参数时会返回 JSON 字符串化结果,但我不确定向调用方指示缺少必需参数的最佳方式是什么。
问得好。不幸的是(或者也许幸运的是),JAX-RS中没有机制来强制任何参数。如果未提供参数,则其值将为,您的资源应相应地处理它。我建议使用来通知您的用户:NULL
WebApplicationException
@GET
@Path("/some-path")
public String read(@QueryParam("name") String name) {
if (name == null) {
throw new WebApplicationException(
Response.status(Response.Status.BAD_REQUEST)
.entity("name parameter is mandatory")
.build()
);
}
// continue with a normal flow
}
可以使用批注来强制参数,方法是用 注释来强制这些参数。请参阅泽西岛的示例和 RESTeasy 的示例。javax.validation
@javax.validation.constraints.NotNull
所以你的方法会变成:
@GET
@Path("/some-path")
public String read(@NotNull @QueryParam("name") String name) {
String something =
// implementation
return something;
}
请注意,JAX-RS 提供程序随后会将异常转换为某些错误代码。通常可以通过注册您自己的 实现来覆盖它。javax.ws.rs.ext.ExceptionMapper<javax.validation.ValidationException>
这提供了一种将强制参数转换为错误响应的集中式方法,并且不需要重复代码。