关于SpringBoot 接受Date类型以及返回时间格式的记录

最近开始接触SpringBoot,不得不说他很强大。 
下面说说SpringBoot接受时间的问题,网上的方法很多,我就说说我自己的。

接受时间:

    @NotNull(message = "过期日不能为空")
    @DateTimeFormat(pattern="yyyy-MM-dd hh:mm:ss")
    private Date expired;


 
用@DateTimeFormat 注解去接受,就是不会去报错。

返回时间格式方式一:

@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") 


用接送@JsonFormat 注解去返回,我用的时jackson的json转换包,SpringBoot 他自身就集成了这些,所以不用去引入。

返回时间格式方式二(这种方式不用注解):

首先去自定义一个类去继承 StdDateFormat 这个类,然后去重写他的method.
 

import com.fasterxml.jackson.databind.util.StdDateFormat;
import org.apache.commons.lang3.StringUtils;

import java.text.FieldPosition;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @ClassName CustomDateFormat
 * @Description TODO
 * @Date 2018/8/16 9:32
 * @Author itastro
 * @Version 1.0
 **/
public class CustomDateFormat extends StdDateFormat {


    private static final long serialVersionUID = -3201781773655300201L;

    public static final CustomDateFormat instance = new CustomDateFormat();

    @Override
    /**
     * @ClassName: CustomDateFormat
     * 这个方法可不写,jckson主要使用的是parse(String)这个方法用来转换日期格式的,
     * 只要覆盖parse(String)这个方法即可
     * @date 2018年01月23日 下午4:28:57
     */
    public Date parse(String dateStr, ParsePosition pos) {
        SimpleDateFormat sdf  = null;
        if(StringUtils.isBlank(dateStr)){
            return null;
        }
        if (dateStr.length() == 10) {
            sdf = new SimpleDateFormat("yyyy-MM-dd");
            return sdf.parse(dateStr, pos);
        }
        if (dateStr.length() == 16) {
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            return sdf.parse(dateStr, pos);
        }
        if (dateStr.length() == 19) {
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf.parse(dateStr, pos);
        }
        if (dateStr.length() == 23) {
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            return sdf.parse(dateStr, pos);
        }
        return super.parse(dateStr, pos);
    }

    @Override
    public Date parse(String dateStr) {
        ParsePosition pos = new ParsePosition(0);
        SimpleDateFormat sdf  = null;
        if(StringUtils.isBlank(dateStr)){
            return null;
        }
        if (dateStr.length() == 10) {
            sdf = new SimpleDateFormat("yyyy-MM-dd");
            return sdf.parse(dateStr, pos);
        }
        if (dateStr.length() == 16) {
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            return sdf.parse(dateStr, pos);
        }
        if (dateStr.length() == 19) {
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf.parse(dateStr, pos);
        }
        if (dateStr.length() == 23) {
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            return sdf.parse(dateStr, pos);
        }
        return super.parse(dateStr, pos);
    }

    public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date, toAppendTo, fieldPosition);
    }

    public CustomDateFormat clone() {
        return new CustomDateFormat();
    }
}


接下来在让SpringBoot启动类实现WebMvcConfigurer这个类,重写他的方法。

@MapperScan("com.bl.station.mapper")
@ComponentScan("com.bl.station.*")
@EnableAutoConfiguration
@ImportResource(locations = {"classpath:mykaptcha.xml"})
@ServletComponentScan
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)// 解决jmx重复注册bean的问题
@Import(FdfsClientConfig.class)
@EnableSwagger2
public class BlstationWebApplication  extends SpringBootServletInitializer implements WebMvcConfigurer {


    public static void main(String[] args) {
        SpringApplication.run(BlstationWebApplication.class, args);
    }


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(BlstationWebApplication.class);
    }
   @Bean
    public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        //设置日期格式
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(CustomDateFormat.instance);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
        //设置中文编码格式
        List<MediaType> list = new ArrayList<MediaType>();
        list.add(MediaType.APPLICATION_JSON_UTF8);
        mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
        return mappingJackson2HttpMessageConverter;
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(getMappingJackson2HttpMessageConverter());
    }
}


 
这样的话他的日期返回格式就正确了。

返回日期是时时间相差8小时的问题 
有时你会发现你的时间和实际时间相差8小时。
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
1
加上 timezone = “GMT+8”,如果还是不行请进行修改数据库连接配置。

 url: jdbc:mysql://localhost:3306/station?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai


serverTimezone=Asia/Shanghai 设置成他。

还有这个配置我没试,有兴趣的可以试下:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/station?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
    username: root
    password: Zn252600@
    jackson:
          date-format: yyyy-MM-dd HH:mm:ss
          time-zone: GMT+8


 
到此结束,亲测可用 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用Spring Boot框架实现银行系统根据日期范围查找交易记录的代码: 首先,我们需要定义一个交易记录实体类Transaction,如下所示: ``` @Entity @Table(name = "transactions") public class Transaction { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String accountNumber; private Date transactionDate; private Double amount; // getters and setters } ``` 接下来,我们需要定义一个交易记录的Repository,用于访问数据库: ``` public interface TransactionRepository extends JpaRepository<Transaction, Long> { List<Transaction> findByTransactionDateBetween(Date startDate, Date endDate); } ``` 在上述代码中,我们使用了Spring Data JPA提供的findByTransactionDateBetween方法,它会根据指定的日期范围查询交易记录。 然后,我们需要定义一个用于处理交易记录的Controller: ``` @RestController @RequestMapping("/transactions") public class TransactionController { @Autowired private TransactionRepository transactionRepository; @GetMapping public List<Transaction> getTransactionsByDateRange(@RequestParam("startDate") @DateTimeFormat(pattern="yyyy-MM-dd") Date startDate, @RequestParam("endDate") @DateTimeFormat(pattern="yyyy-MM-dd") Date endDate) { return transactionRepository.findByTransactionDateBetween(startDate, endDate); } } ``` 在上述代码中,我们使用了Spring MVC提供的@GetMapping注解,它会将HTTP GET请求映射到指定的方法上。我们还使用了@RequestParam注解,它会将HTTP请求中的参数绑定到指定的方法参数上。最后,我们调用TransactionRepository中的findByTransactionDateBetween方法查询交易记录,并将结果返回。 最后,我们需要在Spring Boot应用程序中启用JPA和MVC: ``` @SpringBootApplication @EnableJpaRepositories(basePackages = "com.example.repository") public class BankApplication { public static void main(String[] args) { SpringApplication.run(BankApplication.class, args); } } ``` 在上述代码中,我们使用了Spring Boot提供的@SpringBootApplication注解,它会自动配置应用程序。我们还使用了@EnableJpaRepositories注解,它会启用JPA Repository。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值