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