Spring Boot:如何使字段在POST请求中成为必填字段,而在PUT请求中则应为可选字段

时间:2018-12-30 17:47:43

标签: spring-boot annotations entity

我正在使用实体类。 考虑对于POST请求和更新(即在PUT请求中),在请求主体中字段“名称”是必选的,“名称”字段应该是可选的。我们不需要再次传递“名称”字段,这是没有必要的。因此,我想使“名称”属性在POST请求正文中成为必需,而在PUT请求正文中成为可选。

1 个答案:

答案 0 :(得分:1)

您可以在JSR303批注中使用groups参数。

通过“现有”界面访问时,

@NotEmpty注释适用:

public class Greeting {

  private final long id;
  @NotEmpty(groups = Existing.class)
  private final String content;

  public Greeting(long id, String content) {
      this.id = id;
      this.content = content;
  }

  public long getId() {
      return id;
  }

  public String getContent() {
      return content;
  }

  public interface Existing {
  }
}

在PutMapping上注意@Validated(Existing.class)注释

@PostMapping("/greeting")
public Greeting newGreeting( @RequestBody Greeting gobj) {
    return new Greeting(counter.incrementAndGet(),
            String.format(template, gobj.getContent()));
}

@PutMapping("/greeting")
public Greeting updateGreeting(@Validated(Existing.class) @RequestBody Greeting gobj) {
    return new Greeting(gobj.getId(),
            String.format(template, gobj.getContent()));
}

对于上面的示例,Json主体{"id": 1}将适用于POST,但对于PUT,您将获得HTTP 400,告诉您“内容参数不能为空”。两种方法都可以使用{"id": 1, "content":"World"}