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.
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>
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