Spring MVC Custom Validation(Hướng dẫn validate file)

2023-08-31 08:48:49

Spring MVC Custom Validation trong java spring MVC , Validate file không rỗng , Validate định dạng file trong spring mvc java

Ở phần trước chúng đa đã validate được form trong spring web mvc phần này chúng ta tìm cách custome validate trong ví dụ validate file 

Tham khảo phần 1

Bước 1: Định nghĩa annotation: FileNotNull , ValidImage và class FileNotNullValidator và ValidImageValidator.java trong package validator

Tạo interface FileNotNull

package validator;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {FileNotNullValidator.class}) 
public @interface FileNotNull {
	String message() default "Not empty file image";

    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Tạo Class FileNotNullValidator

package validator;

import javax.validation.ConstraintValidator;

public class FileNotNullValidator implements ConstraintValidator<FileNotNull, MultipartFile>{

	@Override
	public boolean isValid(MultipartFile value, ConstraintValidatorContext context) {
		
		if(value.getOriginalFilename().isEmpty()) {
			return false;
		}
		return true;
	}

}

Tạo interface ValidImage

package validator;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {ValidImageValidator.class})
public @interface ValidImage {
	String message() default "Invalid image file";
	String[] type();
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Tạo Class ValidImageValidator


package validator;

import javax.validation.ConstraintValidator;
public class ValidImageValidator implements ConstraintValidator<ValidImage, MultipartFile> {

	private String[] types;

    @Override
    public void initialize(ValidImage validImage) {
        this.types = validImage.type();
    }
    
	@Override
	public boolean isValid(MultipartFile value, ConstraintValidatorContext context) {
		
		Boolean bl = false;

		if(value.getOriginalFilename().isEmpty()) {
			bl = true;
		}
		for (String type : types) {
			if(type.equals(value.getContentType())) {
				return true;
			}
		}
		
		return bl;
	}
	
}

B2: Tạo ProductDTO trong package dto

public class ProductDTO {
	private Integer productId;
	@NotEmpty(message = "Khong duoc trong")
	private String productName;
	@FileNotNull(message = "Khong duoc trong")
	@ValidImage(type = {"image/jpeg","image/png","image/jpg"},message = "Khong dung dinh dang nhe")
	private MultipartFile image;
	@NotNull(message = "Khong duoc trong")
	private Float price;
	@NotEmpty(message = "Khong duoc trong")
	private String description;
	private Category category;
	
	public ProductDTO() {
		
	}
public Integer getProductId() {
		return productId;
	}

	public void setProductId(Integer productId) {
		this.productId = productId;
	}

	public String getProductName() {
		return productName;
	}

	public void setProductName(String productName) {
		this.productName = productName;
	}

	public MultipartFile getImage() {
		return image;
	}

	public void setImage(MultipartFile image) {
		this.image = image;
	}

	public Float getPrice() {
		return price;
	}

	public void setPrice(Float price) {
		this.price = price;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public Category getCategory() {
		return category;
	}

	public void setCategory(Category category) {
		this.category = category;
	}

}

B3: Tạo ProductController trong package controllers

package controllers;

@Controller
public class ProductController {

	@Autowired
	private ProductDAO productDAO;
	@Autowired
	private CategoryDAO categoryDAO;

	@RequestMapping(value = "/product")
	public String index(Model model) {
		List<Product> list = productDAO.getAll();
		model.addAttribute("list", list);
		return "product/index";
	}

	@GetMapping(value = "/addProduct")
	public String add(Model model) {
		ProductDTO product = new ProductDTO();
		List<Category> listCategory = categoryDAO.getAll();
		model.addAttribute("product", product);
		model.addAttribute("listCategory", listCategory);
		return "product/add";
	}

	@PostMapping(value = "/insertProduct")
	public String save(@Valid @ModelAttribute("product") ProductDTO product,BindingResult result, Model model,
						 HttpServletRequest request, RedirectAttributes redirectAttributes) {
		
		
		if(result.hasErrors()) {
			
			return "not ok";
		} else {
			return "not not ok";
	
		}
	}


}


B4 : tạo views add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet"
	href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
</head>
<body>
	<div class="container">
		<div class="row justify-content-center">
			<div class="col-lg-6">
				<form:form action="insertProduct" method="POST"
					modelAttribute="product" enctype="multipart/form-data">
					<div class="form-group">
						<label for="exampleInputEmail1">Product Name</label>
						<form:input type="text" path="productName" class="form-control" />
						<form:errors path="productName" cssClass="text-danger"></form:errors>
					</div>
					<div class="form-group">
						<label for="exampleInputEmail1">price</label>
						<form:input type="text" path="price" class="form-control" />
						<form:errors path="price" cssClass="text-danger"></form:errors>
					</div>
					<div class="form-group">
						<label for="exampleInputEmail1">Image</label> <form:input type="file"
							path="image" class="form-control" />
							
						<form:errors path="image" cssClass="text-danger"></form:errors>
					</div>
					<div class="form-group">
						<label for="exampleInputEmail1">Category</label>
						<form:select path="category.categoryId" class="form-control">
							<form:options items="${listCategory}" itemLabel="categoryName"
								itemValue="categoryId" />
						</form:select>

					</div>
					<div class="form-group">
						<label for="exampleInputEmail1">Description</label>

						<form:textarea path="description" class="form-control" />
					</div>
					<button type="submit" class="btn-block btn-primary">Add</button>
				</form:form>
			</div>
		</div>
	</div>
</body>
</html>

Cấu trúc thư mục : 

Kết Quả:

TÁC GIẢ : LẠI HỮU BÁCH FB

Bài viết liên quan

Ngày đăng : 2023-07-26 17:12:59
Hướng dẫn sử dụng i18n Internationalization(Quốc tế hóa) làm đa ngôn ngữ trong Spring MVC

Sử dụng i18n Internationalization(Quốc tế hóa) làm đa ngôn ngữ trong ứng dụng web với Spring MVC

Read More
Ngày đăng : 2023-07-20 17:17:45
Tải giao diện Admin LTE

Tải giao diện Admin LTE 2 bản rút gọn nhẹ làm trang quản trị cho ứng dụng web ...............

Read More
Ngày đăng : 2023-06-22 11:15:11
Hướng dẫn CRUD Spring WebMVC vs Hibernate phần 2 (Quản lý sản phẩm)

Hướng dẫn CRUD Spring WebMVC vs Hibernate phần 2 (Quản lý sản phẩm), CRUD có upload image và có quan hệ khóa ngoại

Read More
Ngày đăng : 2023-06-20 10:30:47
Hướng dẫn CRUD (Thêm sửa xóa) Spring WebMVC vs Hibernate

Hướng dẫn Thêm sửa xóa dữ liệu với spring webmvc sử dụng hibernate , trong bài viết này mình sử dụng database oracle

Read More
Ngày đăng : 2023-06-13 18:25:02
Hướng dẫn upload file trong spring webmvc

Hướng dẫn upload file trong spring webmvc sử dụng common-io, common-fileupload ...

Read More
Ngày đăng : 2023-06-13 18:15:39
Hướng dẫn validate form trong Spring WebMVC

Hướng dẫn validate form trong springMVC sử dụng javax-validate

Read More
Ngày đăng : 2023-06-08 14:57:17
Tổng quan về Spring Framework và Spring MVC

Là một framework phát triển ứng dụng phổ biến nhất cho ứng dụng doanh nghiệp trong Java Là một nền tảng Java mã nguồn mở. Được viết đầu tiên bởi Rod Johnson và được phát hành lần đầu dưới phiên bản Apache 2.0 vào tháng 6 năm 2003

Read More