问题
I am working on creating a web application using struts. I want to send out a error JSON response like the below when the request URL is not well formed
{
“status”: 409,
"code": 40924
“property”: “aggregation”,
“message”: “aggregationId not specified.”,
“moreInfo”: “https://www.iiitb-swn.com/docs/api/errors/40924”
}
I am already using the struts2-json plugin for serializing response objects using JSON. How should I go about sending JSON error responses. I can think of the below way of doing the same.
Use an error response object in the action class and set all name required name value pairs explicitly
private Map<String, String> errorObject;
public String execute()
{
...
if (aggregationId == -1)
{
errorObject = new HashMap<>();
errorObject.put("status", "400");
errorObject.put("code", "40924");
...
return INPUT;
}
...
}
I could then handle serializing only the errorObject
in my struts.xml
.
I am new to Struts and was wondering if there is an established way of doing this? Perhaps one which makes using of the Struts framework better.
回答1:
Struts2 actionErrors
, fieldErrors
provided by the ActionSupport
. You can fill action errors or they are produced by the validation interceptor. For example
addFieldError("aggregation", “aggregationId not specified.”);
addFieldError("moreInfo", “https://www.iiitb-swn.com/docs/api/errors/40924”);
Then return json
result as a response.
<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>
回答2:
In this case I preferred to add the "fieldErrors" property as root object of the result, instead of filtering with regular expressions.
So, I added this to the action configuration (in this case with annotations)
@Result(name="input", type="json", params={"root","fieldErrors"})
And in the ajax configuration, under the success result, I used the returned JSON as
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>");
}
}
}
}
this adds to the #submit_result
div I have the page
username error: Username must be at least 6 charachers long
password error: Password msut be at least 8 charachers long
来源:https://stackoverflow.com/questions/26843974/how-to-construct-a-custom-error-json-response-using-the-struts-framework