阅读完需:约 2 分钟
在SpringBoot的编写中常常用@RestController
来代替@Controller
是因为 @RestController
集合了 HttpMessageConverter
来从中转换java代码,从而输出和输入json格式的数据。
目录:
先写一个bean:
public class User {
private Integer id;
private String username;
private String address;
// @JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", address='" + address + '\'' +
", birthday=" + birthday +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
然后是Controller:
@RestController
public class UserController {
@GetMapping("/user")
public List<User> getAllUser(){
List<User> users=new ArrayList<>();
for(int i=0;i<10;i++){
User user=new User();
user.setAddress("www.enmalvi.com");
user.setUsername("tiga"+i);
user.setId(i);
user.setBirthday(new Date());
users.add(user);
}
return users;
};
}
之后就可以运行springboot看看结果:
看到了日期的默认格式,但是这不是我想要的格式怎么办?
第一种,可以在bean里写:
@JsonFormat(pattern = "yyyy-MM-dd")
来规范格式,但是如果有很多东西要规范呢?那不是很麻烦吗?有没有统一修改的呢?——有!
创建WebMvcController.java文件
@Configuration
public class WebMvcController {
@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter();
ObjectMapper om=new ObjectMapper();
om.setDateFormat(new SimpleDateFormat(("yyyy/MM/dd")));
converter.setObjectMapper(om);
return converter;
}
}
我们来重写MappingJackson2HttpMessageConverter
这个方法就可以了,在这里面还可以规定很多东西,比如编码,格式什么的。
再来看一下结果:
果然日期的格式变了,我们可以来看一下源码!JacksonHttpMessageConvertersConfiguration
@Bean
@ConditionalOnMissingBean(
value = {MappingJackson2HttpMessageConverter.class},
ignoredType = {"org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter", "org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter"}
)
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
return new MappingJackson2HttpMessageConverter(objectMapper);
}
大概的意思是你有MappingJackson2HttpMessageConverter
就用你的默认的就自动失效,你没有就用我的。
在JacksonAutoConfiguration
也是一样的道理,你有就用你的,不然就用我的。
如果你有ObjectMapper
我就失效了,反之听我的,所以我们还可以这么写:
@Configuration
public class WebMvcController {
// @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;
}
}
结果还是一样的: