我有一个 dropwizard 服务,我试图在其中实现请求验证,下面是相同的代码。
import com.google.common.collect.ImmutableMap;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import com.fasterxml.jackson.annotation.JsonProperty;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/system-info")
@Produces(MediaType.APPLICATION_JSON)
public class SystemInfo {
@GET
@Path("/get")
public Response testValidation(@QueryParam("name") String name,
@QueryParam("phoneNo") Long phoneNo,
@QueryParam("email") String email,
@QueryParam("password") String password) {
if(email == null) {
return Response.ok(ImmutableMap.of("status", "email missing")).build();
}
//bunch of other validations
return Response.ok(ImmutableMap.of("status", "ok")).build();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/post")
public Response testPostValidation(final Person person) {
if(person.getEmail() == null) {
return Response.ok(ImmutableMap.of("status", "email missing")).build();
}
return Response.ok(ImmutableMap.of("status", "ok")).build();
}
}
class Person {
@JsonProperty
private String name;
@JsonProperty
private String email;
@JsonProperty
private long phoneNo;
@JsonProperty
private String password;
public String getEmail(){
return email;
}
public Person(){};
}
在 GET 和 POST 方法中,我都有 QueryParams 和要验证的 Person 对象。
我在 Resource 类本身内部有验证逻辑,我可以创建一个单独的类并将 if 语句替换为
//if(email == null) {
// return Response.ok(ImmutableMap.of("status", "email missing")).build();
//}
if(!CustomValidater.validate(email, name, phone, password)) {
return Response.ok(ImmutableMap.of("status", "data missing")).build();
}
并对 POST 执行相同的操作,这样验证逻辑就被抽象到不同的类中。
这是进行验证的正确方法还是我应该创建将进行此验证的自定义注释?
最佳答案
您应该创建自定义 validator ,或向模型添加约束验证。
人应该具有以下属性:
@NotNull
private String name;
@NotEmpty
private String surname;
...
如果需要的话,应该作为方法参数进行验证:
@Valid Person person
关于java - Dropwizard:如何为 GET/PUT 添加自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57759714/