我使用Spring MVC
并返回JSON
作为响应。我想创建一个通用的JSON
响应,我可以放入任何类型,并希望响应看起来像这样
{
status : "success",
data : {
"accounts" : [
{ "id" : 1, "title" : "saving", "sortcode" : "121212" },
{ "id" : 2, "title" : "current", "sortcode" : "445566" },
]
}
}
所以我创建了一个Response<T>
对象
public class Response<T> {
private String status;
private String message;
T data;
...
...
}
Spring
控制器中使用此响应对象返回空响应对象和/或填充的响应对象。提前感谢GM
更新:
为了得到与所描述的类似的帐户输出,即在JSON
中使用“JSON
”键,我必须在控制器中使用Response<Map<String, List<Account>>>
:
@RequestMapping(value = {"/accounts"}, method = RequestMethod.POST, produces = "application/json", headers = "Accept=application/json")
@ResponseBody
public Response<Map<String, List<Account>>> findAccounts(@RequestBody AccountsSearchRequest request) {
//
// empty accounts list
//
List<Account> accountsList = new ArrayList<Account>();
//
// response will hold a MAP with key="accounts" value="List<Account>
//
Response<Map<String, List<Account>>> response = ResponseUtil.createResponseWithData("accounts", accountsList);
try {
accountsList = searchService.findAccounts(request);
response = ResponseUtil.createResponseWithData("accounts", accountsList);
response.setStatus("success");
response.setMessage("Number of accounts ("+accounts.size()+")");
} catch (Exception e) {
response.setStatus("error");
response.setMessage("System error " + e.getMessage());
response.setData(null);
}
return response;
}
这是做这个的正确方式吗?例如,为了在JSON
输出中获得"accounts“键?
发布于 2013-06-30 08:27:37
虽然您的示例JSON是无效的(status
和data
没有用引号括起来),但是这种方法仍然有效。
您需要确保您的类路径中有Jackson jars,Spring将负责其余的工作。
为了使其正常工作,我将为您的response类创建一个构造函数,如下所示:
public class Response<T> {
private String status;
private String message;
private T data;
public Response(String status, String message, T data) {
this.status = status;
this.message = message;
this.data = data;
}
//...getter methods here
}
然后在Spring控制器中,您只需从使用@RequestMapping
映射的方法返回此对象
@Controller
public class MyController {
@RequestMapping(value="/mypath", produces="application/json")
public Response<SomeObject> myPathMethod() {
return new Response<SomeObject>("200", "success!", new SomeObject());
}
}
https://stackoverflow.com/questions/17384593
复制相似问题