如何使用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 actionErrorsActionSupport提供的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