[SpringMVC 03] json
SpringMVC 03
1. JSON格式
後端留介面傳資料 --- json格式 ---- 前端獨立部署渲染資料
JSON:JavaScript Object Notation,js物件標記, 是一種輕量級的資料交換格式,
採用完全獨立於程式語言的文字格式儲存和表示資料, 有效提升網路傳輸效率
是JS物件的字串表示,本質是一個字串
語法格式:
- 物件表示為鍵值對,資料用逗號分隔
- 花括號儲存物件
- 方括號儲存陣列
eg:單個物件{"id":1,"age":3,"name":"roy"}
,
集合物件: [{"id":1,"age":3,"name":"roy"}, {"id":1,"age":3,"name":"roy"}]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var user = { name : "Roy", age:3, sex:"boy" } var userString = JSON.stringify(user);//把一個js物件轉換成JSON格式 console.log(userString); console.log(“============”); var userAgain = JSON.parse(userString);//把一個JSON字串轉換成前端物件 console.log(userAgain); </script> </head> <body> </body> </html>
2. JSON解析
(使用包:Jackson或谷歌的gson)
作用: 把物件解析為json格式傳送給前端
1. 直接返回字串
寫user(id, age, name)實體類,並寫controller:
@ResponseBody 註解表示直接返回字串內容,而不經過檢視解析器
@Controller public class UserController { @RequestMapping("/t1") @ResponseBody public String json1(){ User user = new User(1, 3, "roy"); return user.toString(); } }
2. Jackson返回json字串&亂碼
如果是後新增的webapp支援,記得更新lib依賴包
@Controller
public class UserController {
@RequestMapping("/t1")
@ResponseBody
public String json_test() throws JsonProcessingException {
User user = new User(1, 3, "roy");
ObjectMapper objectMapper = new ObjectMapper();//new 一個ObjectMapper
String str = objectMapper.writeValueAsString(user);//呼叫writeValueAsString(物件)
return str;
}
}
返回為:{"id":1,"age":3,"name":"roy"}
亂碼問題: 要麼走filter, 要麼@RequestMapping寫:
@RequestMapping(value="/t1", produces = "application/json;charset=utf-8")
後者在springmvc-servlet.xml中配置:
<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.Jackson20bjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
如果是前後端分離,一般都返回json字串,而不經過檢視解析器;所以在Controller類前面直接定義:
@RestController
來代替@Controller
, RestController
只返回字串。
即:
如果類寫@Controller
, 下面的方法如果要不走檢視解析器,方法要註解@ResponseBody
;
如果類寫@RestController
, 則下面的方法都只返回字串,
方法上的@RequestMapping("/路徑")
是用來指定訪問的
3. 返回時間
方式一:java中用傳統方式設定顯示:
@RequestMapping(value="/t2")
@ResponseBody
public String json2() throws JsonProcessingException {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.format(date);
}
方式二:使用jackson的方式
@RequestMapping(value="/t2")
@ResponseBody
public String json2() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//設定不走時間戳
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
objectMapper.setDateFormat(simpleDateFormat);//設定objectMapper的格式
Date date = new Date();
return objectMapper.writeValueAsString(date);
}