首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dropwizard:如何为GET / PUT添加自定义验证

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

Stack Overflow用户
提问于 2019-09-02 23:43:52
回答 1查看 164关注 0票数 0

我有一个dropwizard服务,我试图在其中实现请求验证,下面是相同的代码。

代码语言:javascript
复制
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语句替换为

代码语言:javascript
复制
//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也做同样的事情,这样验证逻辑被抽象到不同的类中。

这是进行验证的正确方式吗?还是应该创建自定义注释来执行此验证?

EN

回答 1

Stack Overflow用户

发布于 2019-09-02 23:58:09

您应该创建自定义验证器,或者向模型添加约束验证。

Person应具有如下属性:

代码语言:javascript
复制
@NotNull 
private String name;
@NotEmpty
private String surname;
...

如果需要,应该作为方法参数进行验证:

代码语言:javascript
复制
@Valid Person person
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57759714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档