簡體   English   中英

Spring MVC返回JSONS和異常處理

[英]Spring MVC returning JSONS and exception Handling

我正在使用帶控制器的Spring MVC,我的問題是如何返回一個JSON響應,該響應與@ResponseBody對象不同,該對象被返回並且包含在要返回的JSON中。

為了進一步說明,我有一個名為“UserDetails”的對象,它有兩個名為“name”,“emailAddress”的字段

@ResponseBody UserDetails

現在json返回的樣子

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

有什么辦法可以在返回之前修改json(所有控制器中所有方法中的所有jsons),其中將添加“status”字段,而其他json數據將位於json中的“data”鍵下。

另外當從某個地方的java服務器拋出異常時,如何將json返回到前端,json應該具有“status:false”和異常名稱(盡管至少是狀態部分)

創建響應類:

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

    public Response(T d) { data = d; }
}

然后從您的控制器返回:

@ResponseBody public Response getUserDetails) {
    //...
    return new Response(userDetails);
}

對於異常,您需要返回如下對象:

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());
}

另一種解決方案(適用於彈簧3.1),其侵入性較小

在你的春天配置:

<bean id="jacksonConverter"     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="mypackage.MyMessageConverter"
            p:delegate-ref="jacksonConverter">
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

我們的想法是提供您自己的HttpMessageConverter,它委托給提供的jackson轉換器。

public class MyMessageConverter implements HttpMessageConverter<Object> {
// setters and delegating overrides ommitted for brevity
@Override
    public void write(Object t, MediaType contentType, HttpOutputMessage outputMessage) throws IOException,
            HttpMessageNotWritableException {
// t is whatever your @ResponseBody annotated methods return
        MyPojoWrapper response = new MyPojoWrapper(t);

        delegate.write(response, contentType, outputMessage);
    }
}

這樣你所有的pojos都會被你提供的其他json包裹起來。

對於例外,ericacm提出的解決方案是最簡單的方法(記得用@ResponseBody注釋'BadStatus'返回類型)。

需要注意的是:您的json序列化BadStatus也會通過MyMessageConverter,因此您需要在重寫'write'方法中測試對象類型,或者讓MyPojoWrapper處理它。

是。 返回模型和視圖。

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

要添加異常,您可以使用密鑰和success = false以相同的方式執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM