首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >spring泛型json响应

spring泛型json响应
EN

Stack Overflow用户
提问于 2013-06-30 04:57:08
回答 1查看 11.8K关注 0票数 4

我使用Spring MVC并返回JSON作为响应。我想创建一个通用的JSON响应,我可以放入任何类型,并希望响应看起来像这样

代码语言:javascript
复制
{
    status : "success",
    data : {
        "accounts" : [
            { "id" : 1, "title" : "saving", "sortcode" : "121212" },
            { "id" : 2, "title" : "current", "sortcode" : "445566" },
        ]
     }
}

所以我创建了一个Response<T>对象

代码语言:javascript
复制
public class Response<T> {

    private String status;
    private String message;
    T data;
...
...
}

  1. 这是执行此操作的正确方法,还是有更好的方法?
  2. 如何在Spring控制器中使用此响应对象返回空响应对象和/或填充的响应对象。

提前感谢GM

更新:

为了得到与所描述的类似的帐户输出,即在JSON中使用“JSON”键,我必须在控制器中使用Response<Map<String, List<Account>>>

代码语言:javascript
复制
@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“键?

EN

回答 1

Stack Overflow用户

发布于 2013-06-30 08:27:37

虽然您的示例JSON是无效的(statusdata没有用引号括起来),但是这种方法仍然有效。

您需要确保您的类路径中有Jackson jars,Spring将负责其余的工作。

为了使其正常工作,我将为您的response类创建一个构造函数,如下所示:

代码语言:javascript
复制
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映射的方法返回此对象

代码语言:javascript
复制
@Controller
public class MyController {
    @RequestMapping(value="/mypath", produces="application/json")
    public Response<SomeObject> myPathMethod() {
        return new Response<SomeObject>("200", "success!", new SomeObject());
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17384593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档