我正在使用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<String, String> errorObject;
public String execute()
{
...
if (aggregationId == -1)
{
errorObject = new HashMap<>();
errorObject.put("status", "400");
errorObject.put("code", "40924");
...
return INPUT;
}
...
}
然后,我可以处理仅errorObject
中的struts.xml
序列化。
我是Struts的新手,并想知道是否有一种既定的方法可以做到这一点?或许可以更好地使用Struts框架。
答案 0 :(得分:3)
actionErrors
提供的Struts2 fieldErrors
,ActionSupport
。您可以填写操作错误,或者它们由验证拦截器生成。例如
addFieldError("aggregation", “aggregationId not specified.”);
addFieldError("moreInfo", “https://www.iiitb-swn.com/docs/api/errors/40924”);
然后返回json
结果作为回复。
<result name="input" type="json">
<param name="statusCode">409</param>
<param name="errorCode">40924</param>
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">^actionErrors.*,^fieldErrors.*</param>
</result>
答案 1 :(得分:1)
在这种情况下,我更喜欢添加&#34; fieldErrors&#34; property作为结果的根对象,而不是使用正则表达式进行过滤。
因此,我将此添加到操作配置(在本例中为注释)
@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<this_field_err.length; ix++) {
$('#submit_result').append(this_field_err[ix]);
$('#submit_result').append("<br>");
}
}
}
}
这会增加#submit_result
div我有页面
username error: Username must be at least 6 charachers long
password error: Password msut be at least 8 charachers long