Json 关于Spring MVC验证表单中@Valid注释的一些疑问
我有以下情况,我认为我有以下形式:Json 关于Spring MVC验证表单中@Valid注释的一些疑问,json,spring,validation,spring-mvc,bean-validation,Json,Spring,Validation,Spring Mvc,Bean Validation,我有以下情况,我认为我有以下形式: <form id="readJson" class="readJsonForm" action="<c:url value="/messageconverters/json" />" method="post"> <input id="readJsonSubmit" type="submit" value="Read JSON" /> </form> 因此,这个Jquery函数创建了一个新的JSO
<form id="readJson" class="readJsonForm" action="<c:url value="/messageconverters/json" />" method="post">
<input id="readJsonSubmit" type="submit" value="Read JSON" />
</form>
因此,这个Jquery函数创建了一个新的JSON对象,该对象的两个属性(foo和fruit)以这种方式进行了值化:
foo=bar
水果=苹果
HTTP请求由我的控制器类的以下方法处理:
/* Metodo che gestisce HTTP Request di tipo POST dirette verso
* l'URL: "/messageconverters/json"
* @param L'oggetto JSON inserito all'interno del campo body dell'HTTP
* su cui viene eseguita una validazione
*
*/
@RequestMapping(value="/json", method=RequestMethod.POST)
public @ResponseBody String readJson(@Valid @RequestBody JavaBean bean) {
return "Read from JSON: " + bean;
}
此方法只需从HTTP请求的body字段获取JSON对象,并使用Jaxb2RootElementHttpMessageConverter将其传输到新的JavaBean对象中
在我的例子中,JavaBean对象是一个只有两个属性的对象:foo和fruit以及getter、setter和toString()方法,类似这样:
@XmlRootElement
公共类JavaBean{
@NotNull
private String foo;
@NotNull
private String fruit;
public JavaBean() {
}
public JavaBean(String foo, String fruit) {
this.foo = foo;
this.fruit = fruit;
}
// GETTER, SETTER & toString() methods
好的,JSON对象中的值放在具有相同名称的JavaBean对象变量中……这对我来说非常清楚
我对@Valid注释的规则有一些问题
我的JavaBean参数是使用@Valid注释注释的,阅读文档后我知道这不是Spring注释,但与验证框架JSR-303验证API相关
我对这个API知之甚少,我记得@Valid触发了对对象字段的验证
但我记得我的对象字段(JavaBeans对象中的变量)必须使用一些验证注释进行注释,例如@NotNull或使用实现我的个人验证器的个人验证Java类
在这种情况下,我对此一无所知,我的方法参数上只有@Valid注释
在这种情况下,你到底要做什么
我唯一能想到的是,检查我的JSON对象是否正确映射到JavaBean对象(如果具有相同的值化属性),例如,如果JSON对象只有一个值化属性,则会出错
有人能帮我吗
Tnx
Andrea首先:如果要发送Json,则需要将consumes=“application/Json”添加到@requestmapping注释中,如果要发送Json响应库,则需要为products添加consumes=“application/Json” 第二:@Valid用于调用验证api,以检查命令对象在映射过程中的所有约束。因此,您需要在类路径中有一个类似hibernate validator的实现。我不确定如果在运行时没有它会发生什么。可能只是忽略了它 要获取控制器中的所有验证错误,请添加BindingResult类型的参数。此类包含所有验证错误。 没有任何东西阻止控制器处理您的对象。您负责对bindingresult调用“hasError”,并采取相应的行动
第三:因为您提到了foo和bar以及JavaBean,所以看起来您正在使用showcase应用程序。这个示例通常编写得很好,并且经过了很好的解释。请尝试按原样部署应用程序并直接进行操作。通过这个示例,我了解了spring mvc的大部分内容。非常感谢,是的,我正在学习showcase示例!!!我出错是因为我的JavaBean类的字段用@NotNull validation annotation注释了,这就是原因,因为这个示例运行良好(字段不为null,因此这是正确验证的)。您对我说的唯一疑问是添加consumes=“application/json”在我的RequestMapping注释中,我知道consumes和product的用法,但在我发布的代码中没有……这可能取决于此,因为此示例取自Converter部分,展示了Spring如何使用Converter转换不同数据流(如JSON对象或XML对象)中的日期流(如文本)?
@NotNull
private String foo;
@NotNull
private String fruit;
public JavaBean() {
}
public JavaBean(String foo, String fruit) {
this.foo = foo;
this.fruit = fruit;
}
// GETTER, SETTER & toString() methods