Bazı alanlarda hazırda bekleme en doğrulama ek açıklamanın bulunduğu bir sınıf varİlkbaharda @Valid parametresiyle @RequestMethod yönteminde çalışan aynı doğrulayıcıyı nasıl programlayabilirim?
public class MyClass {
Long id;
@NotEmpty
@Size(min = 4, max = 50)
String machineName;
@NotEmpty
@Size(min = 4, max = 50)
String humanName;
// Getters, setters, etc…
}
(vb @NotNull
ve @Size(min = 4, max = 50)
... gibi) ben de bir JSON API gibi davranan özel bir kontrolör ve bir JSON deserializer olduğunu API yöntemleri çağrıldığında MyClass nesneleri oluşturur.
@RequestMapping(method = RequestMethod.POST)
public long createMyObject(@RequestBody @Valid MyClass newObj) {
// Create the object in the database
return newObj.getId();
}
ve ben createMyObject
içinde @Valid
kullanabilirsiniz, ben kullanamıyorum varolan nesneyi
@RequestMapping(method = RequestMethod.PUT)
public void updateMyObject(@RequestBody MyClass updatedObj) {
MyClass existingObj = // Get existing obj from DB by updatedObj.getId();
// Do some secondary validation, such as making sure that a specific
// field remains unchanged compared to the existing instance
if (existingObj.getMachineName() != null &&
!existingObj.getMachineName().equals(updatedObj.getMachineName())) {
throw new CannotChangeMachineNameException();
}
else {
updatedObj.setMachineName(existingObj.getMachineName());
}
// [HERE IS WHERE I WANT THE MAGIC TO HAPPEN]
// Save updatedObj to the database
}
günceller başka bir yöntemi: benim özel denetleyicisi ben bu türde yeni bir nesne oluşturmak için bir yöntem var updateMyObject
yılında bizim API uygulama makineAdı değişmeden kalmasını gerektirdiği için - kullanıcıların ya dışlayan tamamen machineName veya veritabanında mevcut aynı değerle doldurmak JSON nesnesi ile API çağırabilirsiniz *
Güncelleştirilmiş nesneyi veritabanına kaydetmeden önce @Valid ek açıklamasını içeren aynı doğrulayıcıyı çağırmak istiyorum. Bu doğrulayıcıyı nasıl bulabilir ve kullanabilirim?
Sana doğrulama grupları kullanabilirsiniz düşünüyorum. MachineName'de (@ ve eski ve yeni isimleri karşılaştıran özel bir doğrulayıcı) '@ NotNull' dışındaki tüm doğrulamaları varsayılan grupta bulun ve kalan geçerlilik denetleyicisinin' Güncelle 'grubunda olmasını sağlayın. Her iki grubu 'updateMyObject' yönteminde kullanın. Bkz. Http://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/chapter-groups.html#d0e2595 –