日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

(SpringMVC)Controller返回JSON数据

發(fā)布時間:2025/3/20 javascript 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (SpringMVC)Controller返回JSON数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • Controller返回JSON數(shù)據(jù)
    • 1. 測試使用
    • 2. 代碼優(yōu)化
    • 3. 測試集合輸出
    • 4. 輸出時間對象
    • 5. 抽取為工具類
    • 6. FastJson

Controller返回JSON數(shù)據(jù)

1. 測試使用

這里使用Jackson解析工具用來解析json,這種工具有很多,比如阿里的fastjson
使用它需要導入相應(yīng)的依賴

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.8</version></dependency>

隨便編寫一個實體類

@Data @AllArgsConstructor @NoArgsConstructor public class User {private String name;private int age;private String sex; }

編寫對應(yīng)的控制器Controller

@Controller public class UserController {@RequestMapping("/j1")@ResponseBodypublic String json1() throws JsonProcessingException {//創(chuàng)建一個jackson的對象映射器,用來解析數(shù)據(jù)ObjectMapper mapper = new ObjectMapper();//創(chuàng)建一個User對象User user = new User("伊澤瑞爾",18,"男");//將對象轉(zhuǎn)換為json格式String str = mapper.writeValueAsString(user);//由于@ResponseBody注解,這里會將str轉(zhuǎn)成json格式返回;十分方便return str;} }

測試

這里出現(xiàn)了亂碼,設(shè)置一下他的編碼格式為utf-8,以及它返回的類型;

通過@RequestMaping的produces屬性來實現(xiàn),修改下代碼

//produces:指定響應(yīng)體返回類型和編碼 @RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")


解決

2. 代碼優(yōu)化

亂碼統(tǒng)一解決
上述解決亂碼問題太過麻煩,每一個都要解決,可以通過springmvc配置統(tǒng)一解決
在springmvc的配置文件上添加一段消息StringHttpMessageConverter轉(zhuǎn)換配置!

<mvc:annotation-driven><mvc:message-converters register-defaults="true"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8"/></bean><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="objectMapper"><bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"><property name="failOnEmptyBeans" value="false"/></bean></property></bean></mvc:message-converters> </mvc:annotation-driven>

返回json字符串統(tǒng)一解決
在類上直接使用 @RestController ,這樣子,里面所有的方法都只會返回 json 字符串了,不用再每一個都添加@ResponseBody 。

//@Controller @RestController public class UserController {@RequestMapping("/j1") // @ResponseBodypublic String json1() throws JsonProcessingException {//創(chuàng)建一個jackson的對象映射器,用來解析數(shù)據(jù)ObjectMapper mapper = new ObjectMapper();//創(chuàng)建一個User對象User user = new User("伊澤瑞爾",18,"男");//將對象轉(zhuǎn)換為json格式String str = mapper.writeValueAsString(user);//由于@ResponseBody注解,這里會將str轉(zhuǎn)成json格式返回;十分方便return str;} }

3. 測試集合輸出

添加一個方法

@RequestMapping("/j2")public String json2() throws JsonProcessingException {//創(chuàng)建一個jackson的對象映射器,用來解析數(shù)據(jù)ObjectMapper mapper = new ObjectMapper();//創(chuàng)建一個集合存放User對象List<User> userList = new ArrayList<User>();User user1 = new User("伊澤瑞爾1",18,"男");User user2 = new User("伊澤瑞爾2",18,"男");User user3 = new User("伊澤瑞爾3",18,"男");User user4 = new User("伊澤瑞爾4",18,"男");userList.add(user1);userList.add(user2);userList.add(user3);userList.add(user4);//將對象轉(zhuǎn)換為json格式String str = mapper.writeValueAsString(userList);//由于@ResponseBody注解,這里會將str轉(zhuǎn)成json格式返回;十分方便return str;}

測試

4. 輸出時間對象

@RequestMapping("/j3")public String json3() throws JsonProcessingException {//創(chuàng)建一個jackson的對象映射器,用來解析數(shù)據(jù)ObjectMapper mapper = new ObjectMapper();//創(chuàng)建一個日期對象Date date = new Date();//自定義日期格式對象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//將對象轉(zhuǎn)換為json格式String str = mapper.writeValueAsString(sdf.format(date));//由于@ResponseBody注解,這里會將str轉(zhuǎn)成json格式返回;十分方便return str;}

5. 抽取為工具類

如果要經(jīng)常使用的話,這樣是比較麻煩的,我們可以將這些代碼封裝到一個工具類中;

public class JsonUtils {public static String getJson(Object object){return getJson(object,"yyyy-MM-dd HH:mm:ss");}public static String getJson(Object object,String dateFormat){ObjectMapper mapper = new ObjectMapper();//不使用時間差的方式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//自定義日期格式對象SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);//指定日期格式mapper.setDateFormat(sdf);try {return mapper.writeValueAsString(object);} catch (JsonProcessingException e) {e.printStackTrace();}return null;} }

修改原先代碼

//@Controller @RestController public class UserController {@RequestMapping("/j1") // @ResponseBodypublic String json1() throws JsonProcessingException {User user = new User("伊澤瑞爾",18,"男");return JsonUtils.getJson(user);}@RequestMapping("/j2")public String json2() throws JsonProcessingException {//創(chuàng)建一個集合存放User對象List<User> userList = new ArrayList<User>();User user1 = new User("伊澤瑞爾1",18,"男");User user2 = new User("伊澤瑞爾2",18,"男");User user3 = new User("伊澤瑞爾3",18,"男");User user4 = new User("伊澤瑞爾4",18,"男");userList.add(user1);userList.add(user2);userList.add(user3);userList.add(user4);//由于@ResponseBody注解,這里會將str轉(zhuǎn)成json格式返回;十分方便return JsonUtils.getJson(userList);}@RequestMapping("/j3")public String json3() throws JsonProcessingException {return JsonUtils.getJson(new Date(),"yyyy-MM-dd HH:mm:ss");} }

測試正常輸出

6. FastJson

fastjson.jar是阿里開發(fā)的一款專門用于Java開發(fā)的包,可以方便的實現(xiàn)json對象與JavaBean對象的轉(zhuǎn)換,實現(xiàn)JavaBean對象與json字符串的轉(zhuǎn)換,實現(xiàn)json對象與json字符串的轉(zhuǎn)換。實現(xiàn)json的轉(zhuǎn)換方法很多,最后的實現(xiàn)結(jié)果都是一樣的。

fastjson 的 pom依賴

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.60</version> </dependency>

fastjson 三個主要的類:

JSONObject 代表 json 對象

  • JSONObject實現(xiàn)了Map接口, 猜想 JSONObject底層操作是由Map實現(xiàn)的。

  • JSONObject對應(yīng)json對象,通過各種形式的get()方法可以獲取json對象中的數(shù)據(jù),也可利用諸如size(),isEmpty()等方法獲取"鍵:值"對的個數(shù)和判斷是否為空。其本質(zhì)是通過實現(xiàn)Map接口并調(diào)用接口中的方法完成的。

JSONArray 代表 json 對象數(shù)組

  • 內(nèi)部是有List接口中的方法來完成操作的。

JSON代表 JSONObject和JSONArray的轉(zhuǎn)化

  • JSON類源碼分析與使用

  • 仔細觀察這些方法,主要是實現(xiàn)json對象,json對象數(shù)組,javabean對象,json字符串之間的相互轉(zhuǎn)化。

代碼測試

public class FastJsonDemo {public static void main(String[] args) {//創(chuàng)建一個對象User user1 = new User("伊澤瑞爾1",18,"男");User user2 = new User("伊澤瑞爾2",18,"男");User user3 = new User("伊澤瑞爾3",18,"男");User user4 = new User("伊澤瑞爾4",18,"男");List<User> list = new ArrayList<User>();list.add(user1);list.add(user2);list.add(user3);list.add(user4);System.out.println("*******Java對象 轉(zhuǎn) JSON字符串*******");String str1 = JSON.toJSONString(list);System.out.println("JSON.toJSONString(list)==>"+str1);String str2 = JSON.toJSONString(user1);System.out.println("JSON.toJSONString(user1)==>"+str2);System.out.println("\n****** JSON字符串 轉(zhuǎn) Java對象*******");User jp_user1=JSON.parseObject(str2,User.class);System.out.println("JSON.parseObject(str2,User.class)==>"+jp_user1);System.out.println("\n****** Java對象 轉(zhuǎn) JSON對象 ******");JSONObject jsonObject1 = (JSONObject) JSON.toJSON(user2);System.out.println("(JSONObject) JSON.toJSON(user2)==>"+jsonObject1.getString("name"));System.out.println("\n****** JSON對象 轉(zhuǎn) Java對象 ******");User to_java_user = JSON.toJavaObject(jsonObject1, User.class);System.out.println("JSON.toJavaObject(jsonObject1, User.class)==>"+to_java_user);} }

總結(jié)

以上是生活随笔為你收集整理的(SpringMVC)Controller返回JSON数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。