Spring Boot Sping Boot :如何在POST请求中将字段设置为强制字段,而在PUT请求中将其设置为可选字段

egdjgwm8  于 2023-04-20  发布在  Spring
关注(0)|答案(1)|浏览(112)

我使用实体类。
考虑字段“名称”在POST请求的请求主体中是强制性的,并且对于更新,即,在PUT请求中,“名称”字段应该是可选的。
我们不需要再次传递“名称”字段,这是没有必要的。
因此,我想在POST请求体中设置“Name”属性为强制属性,在PUT请求体中设置为可选属性。

vh0rcniy

vh0rcniy1#

您可以在JSR 303注解中使用groups参数。
@NotEmpty注解在通过“Existing”接口访问时适用:

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"}将被两种方法接受。

相关问题