Spring MVC返回JSONS和异常处理

Mil*_*daD 7 java spring json exception-handling spring-mvc

我正在使用带控制器的Spring MVC,我的问题是如何返回一个JSON响应,该响应与@ResponseBody对象不同,该对象被返回并且包含在要返回的JSON中.

为了进一步说明,我有一个名为"UserDetails"的对象,它有两个名为"name","emailAddress"的字段

@ResponseBody UserDetails
Run Code Online (Sandbox Code Playgroud)

现在json返回的样子

{name:"TheUsersName",emailAddress:"abc@abc123.com"}

有什么办法可以在返回之前修改json(所有控制器中所有方法中的所有jsons),其中将添加"status"字段,而其他json数据将位于json中的"data"键下.

另外当从某个地方的java服务器抛出异常时,如何将json返回到前端,json应该具有"status:false"和异常名称(尽管至少是状态部分)

sou*_*ica 14

创建响应类:

public class Response<T> {
    T data;
    boolean status = true;

    public Response(T d) { data = d; }
}
Run Code Online (Sandbox Code Playgroud)

然后从您的控制器返回:

@ResponseBody public Response getUserDetails) {
    //...
    return new Response(userDetails);
}
Run Code Online (Sandbox Code Playgroud)

对于异常,您需要返回如下对象:

public class BadStatus {
    String errorMessage;
    boolean status = false;

    public BadStatus(String msg) { errorMessage = msg; }
}

@ExceptionHandler(Exception.class)
public BadStatus handleException(Exception ex, HttpServletRequest request) {
  return new BadStatus(ex.getMessage());
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*ond 2

是的。相反,返回模型和视图。

public ModelMap getUserDetails() {
    UserDetails userDetails; // get this object from somewhere
    ModelMap map = new ModelMap()(;
    map.addAttribute("data", userDetails);
    map.addAttribute("success", true);
    return map;
}
Run Code Online (Sandbox Code Playgroud)

要添加异常,您可以使用 key 和 success = false 以相同的方式执行此操作。