亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot中怎么對date參數進行處理

發布時間:2021-06-17 14:24:06 來源:億速云 閱讀:259 作者:Leah 欄目:編程語言

springboot中怎么對date參數進行處理,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

測試方法

bean代碼:

public class DateModelNoAnnotation {
  private Integer id;
  private Date receiveDate;
}

controller代碼:

@RestController
@RequestMapping("/date")
public class DateVerifyController {
  //  方式一
  @PostMapping("/no")
  public String dateUnNoAnnotation(DateModelNoAnnotation dateModelNoAnnotation){
    System.out.println(dateModelNoAnnotation.toString());
    return "SUCCESS";
  }

//  方式二
  @PostMapping("/has")
  public String dateHasAnnotation(@RequestBody DateModelNoAnnotation dateModelNoAnnotation){
    System.out.println(dateModelNoAnnotation.toString());
    return "SUCCESS";
  }
//  方式三
  @GetMapping("/param")
  public String dateParams(@RequestParam("id")Integer id, @RequestParam("receiveDate")Date receiveDate){
    System.out.println("id====="+id);
    System.out.println("receiveDate====="+receiveDate);
    System.out.println("receiveDate====="+receiveDate.getTime());
    return "SUCCESS";
  }
//  方式四
  @GetMapping("/no/param")
  public String dateNoParams(Integer id,Date receiveDate){
    System.out.println("id====="+id);
    System.out.println("receiveDate====="+receiveDate);
    System.out.println("receiveDate====="+receiveDate.getTime());
    return "SUCCESS";
  }
}

接收參數的幾種方式(實驗)

  • 通過bean來接收數據(表單方式)

    • 這種方式只支持"yyyy/MM/dd HH:mm:ss"這種格式的time參數

  • 通過bean來接收數據(json格式)

    • 這種方式只支持"yyyy-MM-dd HH:mm:ss"這種格式的time參數

  • 通過RequestParam注解

    • 這種方式只支持"yyyy/MM/dd HH:mm:ss"這種格式的time參數

  • 不通過RequestParam注解

    • 這種方式只支持"yyyy/MM/dd HH:mm:ss"這種格式的time參數

以上幾種接收參數的方式接收的參數格式并不統一,而且有時候web前端傳入的時間參數為時間戳,還得寫修改接口或者讓其自己修改格式;

后端給前端統一返回json格式的數據,且時間格式為"yyyy-MM-dd HH:mm:ss"

解決方案

開發之前統一時間接口接收的時間格式

一 yyyy/MM/dd HH:mm:ss 格式

后端所有接口統一接收"yyyy/MM/dd HH:mm:ss"或"yyyy/MM/dd"格式時間參數

第一種: 舍棄上邊的方式二的接口

第二種:不舍棄方拾二,在bean的時間屬性上添加JsonFormat注解,例如:

  com.fasterxml.jackson.annotation.JsonFormat;
   @JsonFormat(timezone = "GMT+8",pattern = "yyyy/MM/dd HH:mm:ss")
  private Date receiveDate;

優勢: 不舍棄方式二接口,且統一了時間格式

使用該注解的弊端: 當pattern="yyyy/MM/dd" 時, 只支持處理“2019/09/03"格式時間參數,不支持“2019/09/03 00:00:00”,且會報錯,當pattern="yyyy/MM/dd HH:mm:ss"時,只支持處理“2019/09/03 00:00:00"格式時間參數,其余格式均會報錯;

二 接收所有時間格式

  • yyyy-MM-dd HH:mm:ss 格式

  • yyyy-MM-dd 格式

  • 時間戳

  • yyyy/MM/dd HH:mm:ss 格式

  • yyyy/MM/dd 格式

注意

該方式不對json或xml的數據處理,比如使用@RequestBody注解的bean(也就是方式二)

工具類:

import org.springframework.core.convert.converter.Converter;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @author gyc
 * @title: DateConverter
 * @projectName app
 * @date 2019/8/1914:36
 * @description: 時間轉換類
 */
public class CourseDateConverter implements Converter<String, Date> {
  private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";
  private static final String dateFormata = "yyyy-MM-dd HH:mm:ss";
  private static final String shortDateFormat = "yyyy-MM-dd";
  private static final String shortDateFormata = "yyyy/MM/dd";
  private static final String timeStampFormat = "^\\d+$";
  @Override
  public Date convert(String value) {
    if(StringUtils.isEmpty(value)) {
      return null;
    }
    value = value.trim();
    try {
      if (value.contains("-")) {
        SimpleDateFormat formatter;
        if (value.contains(":")) {
          //yyyy-MM-dd HH:mm:ss 格式
          formatter = new SimpleDateFormat(dateFormat);
        } else {
          //yyyy-MM-dd 格式
          formatter = new SimpleDateFormat(shortDateFormat);
        }
        return formatter.parse(value);
      } else if (value.matches(timeStampFormat)) {
        //時間戳
        Long lDate = new Long(value);
        return new Date(lDate);
      }else if (value.contains("/")){
        SimpleDateFormat formatter;
        if (value.contains(":")) {
//          yyyy/MM/dd HH:mm:ss 格式
          formatter = new SimpleDateFormat(dateFormata);
        } else {
//          yyyy/MM/dd 格式
          formatter = new SimpleDateFormat(shortDateFormata);
        }
        return formatter.parse(value);
      }
    } catch (Exception e) {
      throw new RuntimeException(String.format("parser %s to Date fail", value));
    }
    throw new RuntimeException(String.format("parser %s to Date fail", value));
  }
}

將時間轉換類應用到接口上

介紹兩種方式:使用@Component + @PostConstruct或@ControllerAdvice + @InitBinder

第一種方式:

@Component + @PostConstruct

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import javax.annotation.PostConstruct;

@Component
public class WebConfigBeans {
 @Autowired
 private RequestMappingHandlerAdapter handlerAdapter;
 @PostConstruct
 public void initEditableAvlidation() {
  ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer)handlerAdapter.getWebBindingInitializer();
  if(initializer.getConversionService()!=null) {
   GenericConversionService genericConversionService = (GenericConversionService)initializer.getConversionService();

   genericConversionService.addConverter(new DateConverterConfig());

  }
 }
}

第二種方式:

@ControllerAdvice + @InitBinder

import com.aegis.config.converter.DateConverter;
import com.aegis.model.bean.common.JsonResult;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
@ControllerAdvice
public class CourseControllerHandler {
  @InitBinder
  public void initBinder(WebDataBinder binder) {
    GenericConversionService genericConversionService = (GenericConversionService) binder.getConversionService();
    if (genericConversionService != null) {
      genericConversionService.addConverter(new CourseDateConverter());
    }
  }
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双峰县| 连城县| 山西省| 尖扎县| 白沙| 耒阳市| 休宁县| 华安县| 米脂县| 康定县| 佛学| 嫩江县| 嘉禾县| 天镇县| 招远市| 永川市| 来宾市| 永州市| 武城县| 谷城县| 红安县| 开封县| 新巴尔虎左旗| 五莲县| 西青区| 庄浪县| 改则县| 汤阴县| 英吉沙县| 丽江市| 开鲁县| 安西县| 鄱阳县| 广宗县| 南召县| 建水县| 海伦市| 临邑县| 西畴县| 拉孜县| 盐池县|