java - spring通用json响应

标签 java json spring spring-mvc

我正在使用 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/

    相关文章:

    java - Spring应用程序上下文重新加载不会更新由DelegatingFilterProxy注册的bean

    java - Spring 4.1 @Qualifier 不起作用

    json - USQL 调用读取 json 数组,无需 key

    javascript - ng-click 中的表达式语法

    spring - 如何在IntelliJ IDEA中应用@ControllerAdvice?

    java - 您如何为普通用户和管理员配置不同的 maxUploadSize 的 MultipartResolver?

    java - 使用 Apache Poi 输出 docx 中的无限虚假页面

    java - 如何更改无状态 EJB 的 Web 服务端点的 http session 超时?

    java - 从字符串中提取方法键/参数

    javascript - JS 中解析 JSON 就像 JAVA 中的 GSON 一样