Spring MVC – 13 – Form Validation – 02 | JSR349

Merhaba Arkadaslar
Bu bolumde Spring MVC form validation konusuna devam edecegiz.
Onceki bolumde org.springframework.validation.Validator arabirimini kullanarak validation islemini gerceklestirmistik.

Spring , JSR 349: Bean Validation 1.1 ‘i destekler.
Bean Validation ‘in Reference implemantation ‘i olan Hibernate Validator ‘i kullanacagiz ;

Oncelikle projemize gerekli dependency’leri ekleyelim.

<properties>
	...
	<validation.api.version>1.1.0.Final</validation.api.version>
	<hibernate.validator.version>5.3.4.Final</hibernate.validator.version>
	...
</properties>


.........

<!-- validation-api & hibernate-validator-->

<dependency>
	<groupId>javax.validation</groupId>
	<artifactId>validation-api</artifactId>
	<version>${validation.api.version}</version>
</dependency>

<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>${hibernate.validator.version}</version>
</dependency>

........

Product.java
Bu ornegimizde Validator sinifi uzerinden degil direkt olarak Model’imiz uzerinden validation islemini gerceklestirecegiz.
Ilgili annotation’larin ne yaptiklari isimlerinden belli olmaktadir. Daha fazla bilgi icin ;
21.1 Using Bean Validation Constraints

package _10.validation.jsr349.domain;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotBlank;

public class Product {

	@Size(min=5 , max=20)
	private String productId;
	
	@NotBlank
	private String name;
	
	@NotNull
	@Min(1) 
	private double unitPrice;
	
	@NotBlank
	private String description;
	
	private String manufacturer;
	private String category;
	
	@Min(10)
	private long unitsInStock;
	private String condition;
        //getters and setters

ProductManagementController.java
Burada dikkat etmemiz gereken nokta @Valid annotation’ini eklememiz gereklidir. Boylelikle validasyon yapilacaktir.

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String processAddNewProductForm(@ModelAttribute("newProduct") @Valid Product productToBeAdded, BindingResult bindingResult) {

	if (bindingResult.hasErrors()) {
		return "10.validation.jsr349.view/addProduct";
	}

	productService.addProduct(productToBeAdded);
	return "redirect:/products";
}

Ornegimizi calistirdigimizda ;

http://localhost:8080/injavawetrust.springmvc/products/add?language=en

 

http://localhost:8080/injavawetrust.springmvc/products/add?language=tr

 


Dikkat edecek olursak bu hata mesajlarini springMessages dosyalarimiza eklemedik. Bizim icin otomatik olarak bu mesajlar desteklenmektedir. Dilersek springMessages dosyamiza ekleyerek default mesajlari override edebiliriz.

JSR 349 ile kullanabilecegimiz mesaj ornekleri ;

annotation name + object name + field -- NotEmpty.newOrder.name
annotation name + field               -- NotEmpty.name
annotation name + field type          -- NotEmpty.java.lang.String
annotation name                       -- NotEmpty

springMessages_en.properties

##bean validation
Size.newProduct.productId=Product {0} should be between {2} and {1} characters long
NotBlank.newProduct.name=Product {0} can not be blank.
Min.newProduct.unitPrice=Product {0} must be greater than or equal to {1}
NotBlank.newProduct.description=Product {0} can not be blank.
Min.newProduct.unitsInStock=Product {0} must be greater than or equal to {1}

springMessages_tr.properties

##bean validation
Size.newProduct.productId=Ürün ismi {2} ve {1} karakterinde olabilir.
NotBlank.newProduct.name=Ürün ismi boş bırakılamaz.
Min.newProduct.unitPrice=Ürün Fiyatı {1} TL den büyük olmalıdır.
NotBlank.newProduct.description=Ürün tanımı boş bırakılamaz.
Min.newProduct.unitsInStock=Geçersiz stok. Stok {1} dan fazla olmalidir.

Ornegimizi tekrar calistirdigimizda;

 

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *