[英]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.