通过POST提交数据时如何应用Hibernate验证程序,而在PUT时如何忽略呢?

用户471011

对于POSTPUT方法具有相同的DTO对象

class AcmeRequest {
    private String id;
    @NotEmpty
    private String productCode;
    private String description;
}

对于POST请求,我总是希望看到productCode字段,这就是为什么我指定@NotEmpty注释,但是PUT收到请求时productCode应该是可选的。

请问有什么可能只是@NotEmpty在请求时跳过PUT

尼克·德尔塔

每个Hibernate Validator批注都有一个groups参数。通过界面,您可以控制激活哪些验证。docs上查看更多内容

在控制器级别,指定groups必须使用@Validated注释激活的控件。

下面是我的一个演示项目中的一个小示例。我曾经和你有同样的问题。

实体:

@Entity
@Table(name = "tasks")
@Getter @Setter
public class Task
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Null(message = "You can't provide a task ID manually. ID's are automatically assigned by our internal systems.", groups = {TaskInsertValidatorGroup.class})
    @NotNull(message = "You must provide an id" , groups = TaskUpdateValidatorGroup.class)
    private Integer id;

    @NotBlank(message = "Task description cannot be empty")
    @Length(max = 255 , message = "Task description length must not exceed 255 characters")
    private String description;

    @JsonProperty("is_completed")
    @Column(name = "is_completed")
    private Boolean isCompleted = false;

    @CreationTimestamp
    @JsonProperty("created_on")
    @JsonFormat(pattern="dd-MM-yyyy HH:mm:ss")
    @Column(name = "created_on", updatable = false)
    private Timestamp creationDate;

    @UpdateTimestamp
    @JsonProperty("last_modified")
    @JsonFormat(pattern="dd-MM-yyyy HH:mm:ss")
    @Column(name = "last_modidied")
    private Timestamp lastModificationDate;

    @Override
    public boolean equals(Object o)
    {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Task task = (Task) o;
        return id.equals(task.id);
    }

    @Override
    public int hashCode()
    {
        return Objects.hash(id);
    }
}

接口:

public interface TaskInsertValidatorGroup {}

public interface TaskUpdateValidatorGroup{}

控制器:

RestController
@RequestMapping("/api")
public class TaskRestController
{

    @Autowired
    private TaskService taskService;

    @GetMapping("/tasks/{id}")
    public ResponseEntity<?> getTask(@PathVariable Integer id)
    {
        return new ResponseEntity<>(taskService.findTask(id),HttpStatus.OK);
    }

    @GetMapping("/tasks")
    public ResponseEntity<?> getTasks()
    {
        return new ResponseEntity<>(taskService.findAllTasks(),HttpStatus.OK);
    }

    @PostMapping("/tasks")
    public ResponseEntity<?> addTask(@Validated(TaskInsertValidatorGroup.class) @RequestBody Task task)
    {
        taskService.saveTask(task);
        APISuccessResponse response = APISuccessResponse.builder()
                .info("Task added")
                .build();

        return new ResponseEntity<>(response,HttpStatus.OK);
    }

    @RequestMapping(value = "/tasks" , method = RequestMethod.PATCH)
    public ResponseEntity<?> updateTask(@Validated(TaskUpdateValidatorGroup.class) @RequestBody Task task)
    {
        taskService.updateTask(task);
        APISuccessResponse response = APISuccessResponse.builder()
                .info("Task Updated")
                .build();

        return new ResponseEntity<>(response,HttpStatus.OK);
    }

    @RequestMapping(value = "/tasks/{id}", method = RequestMethod.DELETE)
    public ResponseEntity<?> removeTask(@PathVariable Integer id)
    {
        taskService.removeTask(id);
        APISuccessResponse response = APISuccessResponse.builder()
                .info("Task Deleted")
                .build();

        return new ResponseEntity<>(response,HttpStatus.OK);
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过POST提交数据时如何应用Hibernate验证程序,而在PUT时如何忽略呢?

来自分类Dev

通过POST AJAX请求提交时如何在表单中添加数据?

来自分类Dev

通过POST AJAX请求提交时如何在表单中添加数据?

来自分类Dev

如何在提交时输入用户输入的值,而在Angular JS中进行最小程度的验证或所需的错误

来自分类Dev

提交时如何清除引导程序模态数据

来自分类Dev

ASP.Net 如何在提交时删除/忽略特定元素的验证?

来自分类Dev

提交表单时如何防止Parsley验证

来自分类Dev

验证失败时如何提交表单

来自分类Dev

提交表单时如何仅验证表单?

来自分类Dev

在更改设备字体时,应用程序字体也会更改。如何限制呢?

来自分类Dev

提交时忽略必填字段验证

来自分类Dev

如何在应用程序关闭时使服务在后台运行,而在应用程序处于前台时停止/禁用该服务?

来自分类Dev

通过Java应用程序和Chrome的POSTMAN扩展发送POST请求时的行为不同。如何调试并查找错误?

来自分类Dev

使用Git提交时如何忽略对文件的更改?

来自分类Dev

在git中,如何在一个分支中提交一个文件,而在所有其他分支中忽略呢?

来自分类Dev

如何在通过 post 方法提交表单时跟踪用户 ID

来自分类Dev

iOS:当应用程序处于前台状态时,如何让用户忽略远程通知?

来自分类Dev

通过sqlldr加载时如何忽略数据文件中可变数量的额外列字段

来自分类Dev

将远程应用程序提交到hadoop时如何设置jar路径?

来自分类Dev

如何通过移动应用程序使用Ajax提交表单

来自分类Dev

如何在提交时验证此HTML / JavaScript表单?

来自分类Dev

我想知道验证失败时如何停止提交表单?

来自分类Dev

语义UI:如何防止验证失败时提交表单?

来自分类Dev

如何在提交时验证多个复选框?

来自分类Dev

如何在提交时以角度7反应形式申请验证?

来自分类Dev

语义UI:如何防止验证失败时提交表单?

来自分类Dev

如何在提交时验证多个复选框?

来自分类Dev

如何通过URL将数据数组提交到reactjs应用

来自分类Dev

通过GET发送表单时如何忽略某些参数?

Related 相关文章

  1. 1

    通过POST提交数据时如何应用Hibernate验证程序,而在PUT时如何忽略呢?

  2. 2

    通过POST AJAX请求提交时如何在表单中添加数据?

  3. 3

    通过POST AJAX请求提交时如何在表单中添加数据?

  4. 4

    如何在提交时输入用户输入的值,而在Angular JS中进行最小程度的验证或所需的错误

  5. 5

    提交时如何清除引导程序模态数据

  6. 6

    ASP.Net 如何在提交时删除/忽略特定元素的验证?

  7. 7

    提交表单时如何防止Parsley验证

  8. 8

    验证失败时如何提交表单

  9. 9

    提交表单时如何仅验证表单?

  10. 10

    在更改设备字体时,应用程序字体也会更改。如何限制呢?

  11. 11

    提交时忽略必填字段验证

  12. 12

    如何在应用程序关闭时使服务在后台运行,而在应用程序处于前台时停止/禁用该服务?

  13. 13

    通过Java应用程序和Chrome的POSTMAN扩展发送POST请求时的行为不同。如何调试并查找错误?

  14. 14

    使用Git提交时如何忽略对文件的更改?

  15. 15

    在git中,如何在一个分支中提交一个文件,而在所有其他分支中忽略呢?

  16. 16

    如何在通过 post 方法提交表单时跟踪用户 ID

  17. 17

    iOS:当应用程序处于前台状态时,如何让用户忽略远程通知?

  18. 18

    通过sqlldr加载时如何忽略数据文件中可变数量的额外列字段

  19. 19

    将远程应用程序提交到hadoop时如何设置jar路径?

  20. 20

    如何通过移动应用程序使用Ajax提交表单

  21. 21

    如何在提交时验证此HTML / JavaScript表单?

  22. 22

    我想知道验证失败时如何停止提交表单?

  23. 23

    语义UI:如何防止验证失败时提交表单?

  24. 24

    如何在提交时验证多个复选框?

  25. 25

    如何在提交时以角度7反应形式申请验证?

  26. 26

    语义UI:如何防止验证失败时提交表单?

  27. 27

    如何在提交时验证多个复选框?

  28. 28

    如何通过URL将数据数组提交到reactjs应用

  29. 29

    通过GET发送表单时如何忽略某些参数?

热门标签

归档