如何使用Struts框架构造自定义错误json响应
我正在使用struts创建一个Web应用程序。 我想在请求URL格式不正确时发出如下所示的错误JSON响应
{ “status”: 409, "code": 40924 “property”: “aggregation”, “message”: “aggregationId not specified.”, “moreInfo”: “https://www.iiitb-swn.com/docs/api/errors/40924” }
我已经使用struts2-json插件使用JSON序列化响应对象。 我该如何发送JSON错误响应。 我可以想到以下做同样的方式。
在操作类中使用错误响应对象,并显式设置所有名称所需的名称值对
private Map errorObject; public String execute() { ... if (aggregationId == -1) { errorObject = new HashMap(); errorObject.put("status", "400"); errorObject.put("code", "40924"); ... return INPUT; } ... }
然后,我可以处理我的struts.xml
仅序列化errorObject
。
我是Struts的新手,想知道是否有一种既定的方法可以做到这一点? 也许是一个更好地使用Struts框架的人。
Struts2 actionErrors
, ActionSupport
提供的fieldErrors
。 您可以填写操作错误,或者它们由validation拦截器生成。 例如
addFieldError("aggregation", “aggregationId not specified.”); addFieldError("moreInfo", “https://www.iiitb-swn.com/docs/api/errors/40924”);
然后返回json
结果作为响应。
409 40924 false ^actionErrors.*,^fieldErrors.*
在这种情况下,我更喜欢将“fieldErrors”属性添加为结果的根对象,而不是使用正则表达式进行过滤。
所以,我将其添加到动作配置中(在本例中为注释)
@Result(name="input", type="json", params={"root","fieldErrors"})
在ajax配置中,在成功结果下,我使用返回的JSON作为
success : function(fieldErrors, textStatus, jqXHR) { for (var property in fieldErrors) { if (fieldErrors.hasOwnProperty(property)) { var this_field_err = fieldErrors[property]; $('#submit_result').append(property+" error"); for(var ix=0; ix "); } } } }
这增加了#submit_result
div我有页面
username error: Username must be at least 6 charachers long password error: Password msut be at least 8 charachers long