java - Dropwizard:如何为 GET/PUT 添加自定义验证

标签 java rest jersey jax-rs dropwizard

我有一个 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/

相关文章:

java - 分配二维数组分配额外内存的问题

java - Java 中的嵌套映射或组合键

java - 我如何告诉程序向对象添加新字段?

json - 有什么方法可以覆盖或更新 Jersey 的 Jackson 版本吗?

web-services - Jersey 过滤器给服务器错误

java - 如何在构造函数中传递参数?

javascript - 使用什么代替 $.getJSON()

rest - rust 诗-openapi : endpoints in multiple files

javascript - Angular 4 顺序 Http.post 调用

java - 将 KafkaProducer 集成到 Jersey REST 中