现在我们想要在springboot项目中返回JSON数据到界面
1.创建springboot项目,只添加web
项目创建好之后我们打开maven依赖关系:
根据图片可以发现springboot帮我们自动创建好了json。
2.创建实体类User
package org.javaboy.json.bean;
public class User {
private Integer id;
private String name;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
3.创建控制类UserContoller
package org.javaboy.json.controller;
import org.javaboy.json.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
//@Controller
@RestController
public class UserContoller {
// @ResponseBody
@GetMapping("/user")
public List<User> getAllUsr(){
List<User> users = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setAddress("www.javaboy.org>>" + i);
user.setName("javaboy>>" + i);
user.setId(i);
users.add(user);
}
return users;
}
}
上面的代码中使用到了@RestContoller注解。其实@RestController是由@Controller和@ResponseBody注解组成。@ResponseBody可以帮助我们返回Json数据。
4.启动项目
访问:http://localhost:8080/user
在项目中我么不仅要返回JSON还需要上传JSON,上传JSON的时候服务器可以把JSON反序列化成一个对象,用一个JSON对象来接收。不管是返回JSON还是上传JSON我们都需要用到HttpMessageConverter。
HttpMessageConverter简介
看名字就知道这是一个消息转换工具,有两方面的功能:
1.将服务端返回的对象序列化成JSON字符串(上面我们操作的就是这个)
2.将前端传来的JSON字符串反序列化成Java对象
所有的JSON生成都离不开相关的HttpMessageConverter
SpringMVC自动配置了Jackson和GSON的HttpMessageConverter,Springboot中又对此做了自动化配置:
1.JacksonHttpMessageConvertersConfiguration中对Jackson做了自动化配置
2.GsonHttpMessageConvertersConfiguration中对GSON做了自动化配置
所以,如果用户使用jackson和gson,没有其他额外配置,则只需要添加依赖即可。
现在在User实体类中添加属性:private Date birthday;
congtroller中也想要添加:user.setBirthday(new Date());
如果要对日期进行格式化,则需要写一个配置类
package org.javaboy.json.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.text.SimpleDateFormat;
@Configuration
public class WebMvcConfig {
// @Bean
// MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
// MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
// ObjectMapper om = new ObjectMapper();
// om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
// converter.setObjectMapper(om);
// return converter;
// }
@Bean
ObjectMapper objectMapper() {
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
return om;
}
}
原理:在springboot中objectMapper()方法如果没有工程会帮我们自动配置(这个方法在JacksonAutoConfiguration类中有写),这里我们自己定义的就用自己的。