Spring Boot: как сделать поле обязательным в запросе POST, а в запросе PUT - необязательным - PullRequest
0 голосов
/ 30 декабря 2018

Я использую класс сущности.Учтите, что поле «Имя» обязательно в теле запроса для запроса POST и для обновления, т. Е. В запросе PUT это поле «Имя» должно быть необязательным.Нам не нужно передавать поле «Имя» снова, это не обязательно.Поэтому я хочу сделать атрибут «Имя» обязательным в теле запроса POST и необязательным в теле запроса PUT.

1 Ответ

0 голосов
/ 30 декабря 2018

Вы можете использовать параметр groups в аннотациях JSR303.

@ 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 {
  }
}

Примечание @Validated(Existing.class) аннотация на PutMapping

@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"} будет принято для обоих методов.

...