SpringBoot解析Json格式數(shù)據(jù)
@ResponseBody
注:該注解表示前端請(qǐng)求后端controller,后端響應(yīng)請(qǐng)求返回 json 格式數(shù)據(jù)前端,實(shí)質(zhì)就是將java對(duì)象序列化
1.創(chuàng)建Controller
注:springboot默認(rèn)就已經(jīng)支持返回json格式數(shù)據(jù),只需要加上@ResponseBody注解即可
/**
* 通過(guò) @responsebody 注解返回 json 格式數(shù)據(jù)
* @return
*/
@RequestMapping("/getAll")
@ResponseBody
public List<User> getUsers(){
ArrayList<User> users = new ArrayList<>();
for(int i=0; i < 10 ; i++){
User user = new User();
user.setId(String.valueOf(i));
user.setUsername("shanggushenlong>>>"+i);
user.setAge(i);
user.setBirthday(new Date());
users.add(user);
}
return users;
}
2.創(chuàng)建bean
public class User {
private String id;
private String username;
private Integer age;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", username='" + username + '\'' +
", age=" + age +
", birthday=" + birthday +
'}';
}
3.結(jié)果
@RequestBody
注:該注解表示前端發(fā)起請(qǐng)求時(shí),要求請(qǐng)求體為 json 格式數(shù)據(jù),實(shí)質(zhì)就是反序列化到對(duì)應(yīng)的對(duì)象中
1.創(chuàng)建controller
/**
* 前端傳入json數(shù)據(jù),后端以String字符串接收
* @param userStr
* @return
*/
@RequestMapping("/setUser")
@ResponseBody
public String getUser(@RequestBody String userStr){
System.out.println(userStr);
return userStr.toString();
}
/**
* 前端傳入json,后端用 user 對(duì)象接收,@RequestBody 能夠自動(dòng)將前端傳入的json與bean
* 自動(dòng)序列化對(duì)應(yīng)成功一個(gè)實(shí)例對(duì)象
* @param user
* @return
*/
@RequestMapping("/setUser2")
@ResponseBody
public String getUser2(@RequestBody User user){
System.out.println(user);
return user.toString();
}
2.結(jié)果
- 使用
postman發(fā)起請(qǐng)求,需要在body中添加相應(yīng)的請(qǐng)求體 - 可能出現(xiàn)的問(wèn)題:
時(shí)間格式轉(zhuǎn)換報(bào)錯(cuò)------ 解決方法,在bean實(shí)體類中對(duì)應(yīng)的birthday字段添加注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
在這里插入圖片描述
在這里插入圖片描述
HttpMessageConverter
springboot對(duì)于json默認(rèn)支持的比較好,但是有時(shí)候需要自定義配置,比如上面的時(shí)間格式配置,假如你的項(xiàng)目有很多個(gè)bean,這個(gè)時(shí)候每一個(gè)bean去添加注解比較麻煩,這個(gè)時(shí)候就可以使用springboot提供的配置類,自己手動(dòng)定義配置。
@Configuration
public class WebMvcConfig {
@Bean
MappingJackson2HttpMessageConverter MyHttpMessageConverter(){
// 1.創(chuàng)建一個(gè) Convert
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
// 2. 創(chuàng)建objectmapper
ObjectMapper objectMapper = new ObjectMapper();
// 配置時(shí)間格式
objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
converter.setObjectMapper(objectMapper);
return converter;
}
}
使用創(chuàng)建一個(gè)config類,使用
MappingJackson2HttpMessageConverter類,手動(dòng)添加json相關(guān)的配置-
可能出現(xiàn)的問(wèn)題:創(chuàng)建配置類,必須在類上添加注解
@Configuration,且在方法上加上@Bean,只有這樣配置才會(huì)生效。
結(jié)果如下:
在這里插入圖片描述
注:此處可能產(chǎn)生的問(wèn)題是:配置類寫(xiě)了,沒(méi)有達(dá)到預(yù)期的效果,可能是 bean 類中該字段注解沒(méi)有去掉 json格式數(shù)據(jù)在前后分離的時(shí)代,是非常重要的一種數(shù)據(jù)格式,因此HttpMessageConverter也變的很重要,我們可以在此相關(guān)類中配置相應(yīng)的規(guī)則springboot提供的相關(guān)配置類JacksonHttpMessageConvertersConfiguration MappingJackson2HttpMessageConverter
希望自己能一直保持初衷,文章一直寫(xiě)下去,和大家一起成長(zhǎng)
本系列代碼github地址:https://github.com/shanggushenlong/springboot-demo