内の豆を検証するために、私は次のマッピングハンドラを持っている:春:どのようにArrayListの
@Controller
@RequestMapping("/product")
public class ProductController {
@RequestMapping(value = "update", method = RequestMethod.POST)
@ResponseBody
public Map<String, ?> update(@Valid @RequestBody ListOfProduct productList) {
if (productDao.saveOrUpdateAll(productList)) {
return jsonUtils.statusMessage(true, "Updated successfully.");
}
return jsonUtils.statusMessage(false, "Failed.");
}
@ExceptionHandler
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ResponseBody
public String handleMethodArgumentNotValidException(MethodArgumentNotValidException error) {
return "Bad request: " + error.getMessage();
}
public static class ListOfProduct extends ArrayList<Product> {
private static final long serialVersionUID = 1L;
public ListOfProduct() {
super();
}
}
}
@Entity
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
@Min(1)
private int id;
@NotNull
@Size(min = 5)
private String name;
public product() {
}
// getters and setters
}
私はこのJSONを検証しようとしている:
[{"id":6, "name":""}]
制約の違反であると考えられます"name"プロパティの@Size。
コントローラー内でハンドル番号handleMethodArgumentNotValidException()によって処理されるはずです。
しかし、その代わりに、私はこの例外ました:
Jan 21, 2012 10:25:00 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/WebTest] threw exception [Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [com.tes.web.entity.Product] during update time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='size must be between 5 and 2147483647', propertyPath=name, rootBeanClass=class com.tes.web.entity.Product, messageTemplate='{javax.validation.constraints.Size.message}'}
]] with root cause
javax.validation.ConstraintViolationException: Validation failed for classes [com.tes.web.entity.Product] during update time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='size must be between 5 and 2147483647', propertyPath=name, rootBeanClass=class com.tes.web.entity.Product, messageTemplate='{javax.validation.constraints.Size.message}'}
]
どれ提案がどのようにこれを解決するの?
ありがとうございました。
はい、そうです。しかし、 'MethodArgumentNotValidException'をスローすることになっています。 'ConstraintViolationException'が' MethodArgumentNotValidException'の代わりにスローされると、 'update()'メソッドの '@ Valid'アノテーションが役に立たないことを意味します(検証は春には行われません)。 –
他の方法で検証を呼び出さない限り、実際に検証がSpringによってトリガーされると思います(Spring MVCはSpringで導入された 'MethodArgumentNotValidException'の間に、3.0.xでも '@ Valid'によってトリガーされた検証を実行しました3.1)。私はどの設定/設定がどの例外をスローするかを考えることはできません。 – Gunnar