Java Rest Service Number Validation Sorunu
-
Merhaba,
Spring boot üzerinde rest servisleri geliştiriyorum. Post methodunda json geliyor ve @requestbody ile bir classa parse ediyorum.
Takıldığım konu,
class içerisinde int bir alan olsun bu alana karşı taraf karakter içeren bir değer gönderdiğinde json parse hatası veriyor. aslında hatası mantıklı ama hata mesajını düzenlemek istiyorum. Alanım string olsa pattern kullanarak model validation yapabilirdim ama int alanda bir yöntem bulamadım. bunun yöntemini bilen veya başka bir yöntem önerecek var mıdır?
Hatayı yakalayabiliyorum fakat hatayı parçalayıp a alanına karakter gönderemezsiniz demek çok zor.
custom validator kullanarak yapabilirim ama o da biraz uğraştırıcı geldi. Umarım anlatabildim :)
-
bean validator kullanıyor isen onun hata mesajlarını ezebilirsin.
field ların üzerine koyacağın anotasyonların message diye bi attribute u var onunla işini görebilirsin.
https://samaxes.com/2014/04/jaxrs-beanvalidation-javaee7-wildfly/
tagext tarafından 08/May/18 20:07 tarihinde düzenlenmiştir -
tagext bunu yazdı
bean validator kullanıyor isen onun hata mesajlarını ezebilirsin.
field ların üzerine koyacağın anotasyonların message diye bi attribute u var onunla işini görebilirsin.
https://samaxes.com/2014/04/jaxrs-beanvalidation-javaee7-wildfly/
sağol hocam. String olsa pattern annotation ile yapabilirdim fakat numeric fieldlarda olmuyor başka öneri var mıdır?
-
Rest exception handler yazman lazım
Şurd var
https://github.com/cekinmezyucel/stumpy
-
Exceptionı yakalayabiliyorum fakat ona gelen mesajdan alanı hatayı falan ayıklamak çok zor
Error message is: JSON parse error: Cannot deserialize value of type
java.lang.Short
from String "a": not a valid Short value -
bu şekilde yaptım
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseEntity<ExceptionResponse> handleHttpMessageNotReadable(HttpMessageNotReadableException ex) {
String fieldName = "";String message = "";
if (!(ex.getCause() instanceof JsonMappingException)) {
return new ResponseEntity<ExceptionResponse>(HttpStatus.BAD_REQUEST);
}JsonMappingException e = (JsonMappingException) ex.getCause();
for (JsonMappingException.Reference reference : e.getPath()) {
fieldName = reference.getFieldName();
}if (fieldName.toLowerCase().contains("date"))
message = fieldName + " format exception. Should be yyyy-MM-dd";
else
message = fieldName + " can not take characters.";ExceptionResponse er = new ExceptionResponse();
er.setResult("Failure");
er.setStatus(HttpStatus.BAD_REQUEST.value());
er.setDescription(message);return new ResponseEntity<ExceptionResponse>(er, HttpStatus.BAD_REQUEST);
-
Custom bir format kullanıyosan xmljavatypeadapter olarak kendi formatterını ekleyebilirsin. Java validation api yahut bean validation dokümantasyonuna bakabilirsin.
-
tagext bunu yazdı
Custom bir format kullanıyosan xmljavatypeadapter olarak kendi formatterını ekleyebilirsin. Java validation api yahut bean validation dokümantasyonuna bakabilirsin.
şimdilik kurtardım ama dediklerine de bakcam hocam sağolasın yardımlar için
-
Exception icinde type ve value var
getType dersen `long` falan doner. value'da sana girilen input.
kendi formatini olursturup `Can not parse %s as %s , value, type` direk error donebilirsin.
jersey'de ise rest servislerin JacksonException'dan boyle alabilirsin
private String getReadable(InvalidFormatException error) { return String.format("%s cannot be parsed as %s", error.getValue(), error.getTargetType().getName()); }
musdawdaf tarafından 09/May/18 21:35 tarihinde düzenlenmiştir