我想将JAX-RS REST服务用作人类使用浏览器直接使用的Web应用程序的后端。由于人不时会犯错,因此我想验证表单输入,并在输入错误消息时重新显示带有验证消息的表单。默认情况下,如果未发送所有或错误的值,JAX-RS将发送400或404状态代码。

假设用户在表单字段“count”中输入了“xyz”:

@POST
public void create(@FormParam("count") int count) {
  ...
}

JAX-RS无法将“xyz”转换为int并返回“400 Bad Request”。

如何告诉用户他在“计数”字段中输入了非法值?是否有比在各处使用Strings并手动进行对话更方便的方法?

最佳答案

我建议例如使用AOP,JSR-303和JAX-RS异常映射器:

import javax.validation.constraints.Pattern;
@POST
public void create(@FormParam("count") @Pattern("\\d+") String arg) {
  int count = Integer.parseInt(arg);
}

然后,定义一个JAX-RS异常映射器,该映射器将捕获所有 ValidationException -s并将用户重定向到正确的位置。

我在JAX-RS的s3auth.com表单验证中使用了类似的东西:https://github.com/yegor256/s3auth/blob/master/s3auth-rest/src/main/java/com/s3auth/rest/IndexRs.java

09-25 16:51
查看更多