• [JavaEE] Data Validation


    When we create Entity and Respority, we also need to do validations to protect our data.

    In Java, validations are built-in, using decorators. For Typescript, found a useful libaray to do the similar validation as well. Checkout class-validator

    Entity:

    @Entity
    public class Book {
    
        // ======================================
        // =             Attributes             =
        // ======================================
    
        @Id
        @GeneratedValue
        private Long id;
    
        @Column(length = 200)
        @NotNull
        @Size(min = 1, max = 200)
        private String title;
    
        @Column(length = 10000)
        @Size(min = 1, max = 10000)
        private String description;
    
        @Column(name = "unit_cost")
        @Min(1)
        private Float unitCost;
    
        @Column(length = 50)
        @NotNull
        @Size(min = 1, max = 50)
        private String isbn;
    
        @Column(name = "publication_date")
        @Temporal(TemporalType.DATE)
        @Past
        private Date publicationDate;
    
        ....    
    }

    Testing:

    We want to test, if we give title as null, it should throw exception.

    @RunWith(Arquillian.class)
    public class BookRepositoryTest {
    
        @Inject
        private BookRepository bookRepository;
    
        // We want the test throw exception
        @Test(expected = Exception.class)
        public void createInvalidBook() {
            Book book = new Book("isbn", null, 12F, 123, Language.ENGLISH, new Date(), "imageURL", "description");
            bookRepository.create(book);
        }
    
        @Deployment
        public static JavaArchive createDeployment() {
            return ShrinkWrap.create(JavaArchive.class)
                    .addClass(BookRepository.class)
                    .addClass(Book.class)
                    .addClass(Language.class)
                    .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
                    .addAsManifestResource("META-INF/test-persistence.xml", "persistence.xml");
        }
    
        @org.junit.Test
        public void create() {
        }
    }

    Respority:

    @Transactional(SUPPORTS)
    public class BookRepository {
    
        // ======================================
        // =          Injection Points          =
        // ======================================
    
        @PersistenceContext(unitName = "bookStorePU")
        private EntityManager em;
    
        // ======================================
        // =          Business methods          =
        // ======================================
    
        public Book find(@NotNull Long id) {
            return em.find(Book.class, id);
        }
    
        // For creating and deleting methods, we want to use REQUIRED
        @Transactional(REQUIRED)
        public Book create(@NotNull Book book) {
            em.persist(book);
            return book;
        }
    
    }

    Testing:

        @Test(expected = Exception.class)
        public void findWithInvalidId() {
            bookRepository.find(null);
        }
  • 相关阅读:
    dedecms如何调用指定栏目下的相关文章
    dedecms二次开发标签总结
    如何在网页中显示数学公式与化学公式的方法
    CSS的选择器
    CSS属性之Overflow之作用
    FTP服务器架构简单方法
    dedecms性能选项与其它选项
    dedecms会员设置、互动设置
    dedecms图片设置属性
    dedecms核心设置
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9401910.html
Copyright © 2020-2023  润新知