我正在使用Spring 4 MVC开发Web应用程序。我想知道是否可以使用javax.validation API验证JSON请求对象。例如,我的实体代码块如下:
...
@JsonProperty("cheFecha")
@NotNull
@Column(name = "che_fecha")
@Temporal(TemporalType.DATE)
@DateTimeFormat(style = "M-")
private Date SsiCheque.cheFecha;
@JsonProperty("cheMonto")
@NotNull
@JsonSerialize(using = CurrencySerializer.class)
@Column(name = "che_monto", precision = 10, scale = 2)
private BigDecimal SsiCheque.cheMonto;
...
我有控制器代码:
@RequestMapping(value = "/addCheck", method = RequestMethod.POST)
public @ResponseBody SsiCheque addChecks(@Valid SsiCheque ssiCheque, BindingResult result) {
//ssiCheque.persist();
System.out.println("add" + result.getErrorCount());// Zero when there are errors
return ssiCheque;
}
最后,我有了jQuery代码:
var formData = $("#formAddChecks :input").serializeArray();
$.ajax({
type: "POST",
url: "addCheck",
data: formData,
beforeSend: function ( xhr ) {
console.log("before Send");
},
error: function (request, status, error) {
console.log('Error ' + "\n" + status + "\n" + error);
},
success: function(data) {
console.log(data);
}
});
JSON对象已正确到达控制器,但我想使用实体javax.annotations API验证JSON。我所看到的只是使用自定义验证器并“重写”验证代码。
这是验证JSON的唯一方法吗?
提前致谢!
更新1
我遵循了@James Massey的建议,现在我的代码如下所示:
控制器
@RequestMapping(value = "/addCheck", method = RequestMethod.POST)
@ResponseBody
public SsiCheque addChecks(@Valid @RequestBody SsiCheque ssiCheque, BindingResult result) {
//ssiCheque.persist();
System.out.println("agregar " + result.getErrorCount());
return ssiCheque;
}
Javascript文件
var ssiCheque = {
cheNumero : $("#formAddChecks cheNumero").val(),
cheRecepto : $("#formAddChecks cheReceptor").val(),
cheMonto : $("#formAddChecks cheMonto").val(),
cheFecha : $("#formAddChecks cheFecha").val(),
cheConcepto : $("#formAddChecks cheConcepto").val()
};
$.ajax({
type: "POST",
contentType: "application/json",
url: "addCheck",
data: ssiCheque,
dataType: "json",
beforeSend: function ( xhr ) {
console.log("before Send");
},
error: function (request, status, error) {
console.log('Error ' /*+ request.responseText*/ + "\n" + status + "\n" + error);
},
success: function(data) {
console.log(data);
}
});
但是我提交表单并执行Ajax函数时遇到400错误(请求不正确)。在json对象格式和控制器规范不兼容之前,我已经遇到了这个错误,但是这次我不知道为什么会是错误。
再次感谢!
解决方案(发问人:Jessai更新)
我检查了这个问题:Spring MVC 400 Bad Request Ajax。
总之,我做了什么:
创建一个要用JSON.stringify解析的对象,并将其发送到控制器。
在控制器中,我用@ResponseBody和@RequestBody设置了方法,如@James Massey所说。
在实体中,我向这些字段添加了@JSONProperty(我已经拥有了这些)和@JSONIgnore(我已添加到cheId字段中)注释。
Javascript:
var ssiCheque = {
cheNumero : $("#formAddChecks #cheNumero").val(),
cheRecepto : $("#formAddChecks #cheReceptor").val(),
cheMonto : $("#formAddChecks #cheMonto").val(),
cheFecha : $("#formAddChecks #cheFecha").val(),
cheConcepto : $("#formAddChecks #cheConcepto").val()
};
$.ajax({
type: "POST",
contentType: "application/json",
url: "addCheck",
data: JSON.stringify(ssiCheque),
dataType: "json",
beforeSend: function ( xhr ) {
console.log("before Send");
},
error: function (request, status, error) {
console.log('Error ' /*+ request.responseText*/ + "\n" + status + "\n" + error);
},
success: function(data) {
console.log(data);
}
});
控制器
@RequestMapping(value = "/addCheck", method = RequestMethod.POST)
@ResponseBody
public SsiCheque addChecks(@Valid @RequestBody SsiCheque ssiCheque, BindingResult result) {
//ssiCheque.persist();
System.out.println("agregar " + result.getErrorCount());
return ssiCheque;
}
谢谢!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句