关于验证的问题

时间:2015-06-23 16:56:29

标签: java validation bean-validation hibernate-validator

我认为这可能会在其他地方得到解答,但在其他帖子的背景下却迷失了方向。所以,决定在这里重申一下。如果有人知道这已在其他地方得到解答,请指出我的方向。所以,我的问题。

  1. 我看到了JSR-303,JSR-349和Hibernate Validator。有什么不同?
  2. 在我看来,Hibernate Validator是JSR-303规范的参考实现,是真的吗?
  3. 那么349是什么?
  4. 如果Hibernate Validator是规范的参考impl,是否还有规范的其他内容?
  5. 现在我正在寻找的一些细节。我已经做了一些关于JSR-303的阅读,我一般都遵循注释的工作原理。我的问题是我可以动态更改约束值吗?以下面的例子为例:

    public class Foo {
        @Min(value = 18, message = "Age must be greater than or equal to 18")
        @Max(value = 150, message = "Age must be less than or equal to 150")
        int fooAge;
    }
    
  6. 那么,有没有办法使用规范在运行时提供年龄限制。因此,我们可以说,出于某种原因,我需要min为20,max为100.在另一种情况下,我需要10和50等等。

    提前感谢您帮我解决此问题。

2 个答案:

答案 0 :(得分:1)

  1. 303是Bean Validation 1.0的JSR。 349是Bean Validation 1.1的JSR。

  2. 项目的主页说:" Hibernate Validator 5.x是参考实现Bean Validation 1.1!"

  3. JSR定义了规范。 Hibernate验证器是本规范的参考实现。

  4. 似乎没有:http://beanvalidation.org/1.1/certified/

  5. 是的,您可以通过将约束分配给验证组来实现,并根据用例激活一个或另一个组。请参阅http://beanvalidation.org/1.0/spec/#validationapi-validatorapi-groups

答案 1 :(得分:1)

就问题而言:

  

如果Hibernate Validator是规范的参考impl,是否还有其他规范?

还有JSR-303的apache实现 - > http://bval.apache.org/不幸的是,最新发布的版本Apache BVal(0.5)不支持Bean Validation 1.1 。它应该在版本中引入:Apache BVal(1.1.0)。现在有一个alpa-snapshot版本:

public SongCell(ListView<Song> list, Playlist playlist) {

    setAlignment(Pos.CENTER_LEFT);

    ContextMenu listContextMenu = new ContextMenu();
    MenuItem removeItem = new MenuItem("Remove");
    MenuItem editID3Item = new MenuItem("Edit ID3");
    MenuItem playNextItem = new MenuItem("Play Next");
    removeItem.setOnAction((ActionEvent event) -> {

        list.getItems().remove(getIndex());

    });

    editID3Item.setOnAction((ActionEvent event) -> {
        Optional<Pair<String, String>> show = new FXID3Edit(getItem()).show();
    });
    playNextItem.setOnAction((ActionEvent event) -> {
        Song song = getItem();
        list.getItems().remove(song);
        playlist.addSongRequest(new SongRequest(song, SongRequest.type.NEXT));
    });

    listContextMenu.getItems().add(removeItem);
    listContextMenu.getItems().add(playNextItem);
    listContextMenu.getItems().add(editID3Item);

    setOnMousePressed(event -> {
        if (event.getButton().equals(MouseButton.SECONDARY)) {

            if (getItem() != null) {

                if (getItem().equals(playlist.getSong())) {
                    playNextItem.setDisable(true);
                    removeItem.setDisable(true);
                } else {
                    playNextItem.setDisable(false);
                    removeItem.setDisable(false);
                }
                listContextMenu.show(list, event.getScreenX(), event.getScreenY());
            }

        }

        if (event.getButton().equals(MouseButton.PRIMARY) && event.getClickCount() == 2) {
            playlist.setIndex(this.getIndex());
            playlist.play();

        }

        event.consume();
    });

}
@Override
protected void updateItem(Song item, boolean empty) {
    super.updateItem(item, empty);

    if (!empty && item != null) {
        this.setText(item.toString());
    } else {
        this.setText("");
    }
}

有关以下内容的更多信息:http://cxf.apache.org/docs/validationfeature.html