Java Jersey 1.19在将路径和请求参数注入请求处理程序方法之前验证它们
我有以下请求处理程序Java Jersey 1.19在将路径和请求参数注入请求处理程序方法之前验证它们,java,jersey,Java,Jersey,我有以下请求处理程序 @GET ResponseEntity getEntity(@PathParam("pathParam") String pathParam, @QueryParam("locale") String locale) { validate(pathParam); validate(locale); ... } 我有几个像上面这样的处理程序,它们都验证请求参数和路径参数。我想去掉请求处理程序中的验证逻
@GET
ResponseEntity getEntity(@PathParam("pathParam") String pathParam,
@QueryParam("locale") String locale) {
validate(pathParam);
validate(locale);
...
}
我有几个像上面这样的处理程序,它们都验证请求参数和路径参数。我想去掉请求处理程序中的验证逻辑,并在注入它们之前在一个地方进行验证 Have filter类,该类重写ContainerRequestFilter,以便所有请求都将通过该筛选器。并在filter类中编写验证逻辑 比如说
public class MyRequestFilter implements ContainerRequestFilter{
public ContainerRequest filter(ContainerRequest containerRequest) throws WebApplicationException {
//DO all your validations here
//throw exception if validation fails
if(!isValidInputs())
throw new WebApplicationException("Invalid Inputs");
//Else the flow is continued and the request will reach its handler method.
return containerRequest;
}
}
在web.xml中,将此类称为请求过滤器之一
<servlet>
<servlet-name>MyApplication</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>MyRequestFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyApplication</servlet-name>
<url-pattern> /myapplication </url-pattern>
</servlet-mapping>
正如扬·苏波尔所暗示的那样。您可能希望使用jersey支持的jsr303实现。你必须包括 我发现这是处理值验证的最佳方法
@GET
@Path("{entityId}/ts")
public TimeSeries<Map<Metric, Number>> getTimeSeriesMap(@PathParam("entityId") final Long entityId,
@QueryParam("c") @NotNull(message = "chronoUnit param 'c' is ia required") final String chronoUnitParam,
@QueryParam("s") @NotNull(message = "start date 's' is required") final String startDateParam,
@QueryParam("e") @NotNull(message = "endDate param 'e' is i required") final String endDateParam,
@QueryParam("tsf") final String timestampFormat) throws StatsException {
你可以这样写一个post方法
@POST
public void save(@Valid Person person) {
...
}
如果firstname在本例中为null,则它将抛出constraintviolation异常。请查看,以查看其中包含的有关此问题的信息。如果您试图使用表单将消息传播回您的用户,则该路径可能特别有用。如果您可以升级到jersey 2,则可以使用bean validation for it JSR 303
@NotNull(message = "first name is required")
@Field
private String firstname;
...
}
@POST
public void save(@Valid Person person) {
...
}