gpt4 book ai didi

java - spring通用json响应

转载 作者:行者123 更新时间:2023-12-01 13:31:39 26 4
gpt4 key购买 nike

我正在使用 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 中使用这个 Response 对象 Controller 返回一个空的响应对象和/或一个填充的响应对象。

  • 提前致谢 GM

    更新:

    为了得到类似的 JSON如所描述的那样输出,即在 JSON 中使用“帐户”键,我不得不使用 Response<Map<String, List<Account>>> Controller 中的以下内容:
    @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 中的“帐户”键输出?

    最佳答案

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

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

    为了让它工作,我会为你的响应类创建一个构造函数,它看起来像这样:

    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 Controller 中,你只需从你的方法中返回这个对象,该对象被映射为 @RequestMapping
    @Controller
    public class MyController {
    @RequestMapping(value="/mypath", produces="application/json")
    public Response<SomeObject> myPathMethod() {
    return new Response<SomeObject>("200", "success!", new SomeObject());
    }
    }

    关于java - spring通用json响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17384593/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com