springmvc返回json
現在很多項目已經前后端分離了,不再使用jsp或者使用jsp但是數據使用ajax來獲取,實現局部刷新的效果,那么springmvc中如何不返回頁面而返回頁面所需要的數據呢。
前后端數據交互現在大多使用json來表示(當然有一部分還是使用xml的),那如何在springmvc中返回json數據呢。
返回json
依賴
<dependency>
??<groupId>com.fasterxml.jackson.core</groupId>
??<artifactId>jackson-databind</artifactId>
??<version>2.11.3</version>
</dependency>
接口層面的改動
在controller返回時不再返回ModelAndView,而是返回具體的數據對象,在方法上添加@ResponseBody注解
@ResponseBody
@RequestMapping("/testJson")
public?User?testJson(){
????User?user?=?new?User();
????user.setName("張三");
????user.setId(2);
????return?user;
}
Why?
為什么只是加了一個依賴,加一個注解就可以完成返回json數據呢。
這里用到了一個接口,HttpMessageConverter接口,該接口可以將請求信息轉為所對應的入參,將返回結果轉為對應類型的響應信息,Spring內置了許多HttpMessageConverter,如MappingJackson2HttpMessageConverter、StringHttpMessageConverter等
public?interface?HttpMessageConverter<T>?{
????boolean?canRead(Class<?>?var1,?MediaType?var2);
????boolean?canWrite(Class<?>?var1,?MediaType?var2);
????List<MediaType>?getSupportedMediaTypes();
????T?read(Class<??extends?T>?var1,?HttpInputMessage?var2)?throws?IOException,?HttpMessageNotReadableException;
????void?write(T?var1,?MediaType?var2,?HttpOutputMessage?var3)?throws?IOException,?HttpMessageNotWritableException;
}
spring提供了兩種方式
-
使用@RequestBody或@ResponseBody對處理的方法進行處理 -
使用HttpEntity/ResponseEntity作為方法的入參或返回值
自定義消息解析
還可以通過集成AbstractHttpMessageConverter來實現自定義的HttpMessageConverter
配置自定義的消息解析器可以通過繼承WebMvcConfigurerAdapter類來重寫方法實現
//?會覆蓋掉SpringMVC默認注冊的多個HttpMessageConverter
@Override
public?void?configureMessageConverters(List<HttpMessageConverter<?>>?converters)?{
}
//?僅添加一個自定義的HttpMessageConverter,不會覆蓋掉默認注冊的HttpMessageConverter
@Override
public?void?extendMessageConverters(List<HttpMessageConverter<?>>?converters)?{
}
https://zhhll.icu/2021/框架/springmvc/基礎/5.springmvc返回json/
本文由 mdnice 多平臺發布