天天看點

The server cannot or will not process the request due to something that is perceived to be a clientHTTP Status 400 – Bad Request

HTTP Status 400 – Bad Request

Type Status Report

Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

Apache Tomcat/9.0.12

<form action="update" method="post">
        出生日期:<input type="date" name="time">
        <input type="submit" value="送出">
    </form>           

錯誤理由很簡單,你傳的資料有問題,要麼寫的限制,要麼時間類型格式

解決方案:

@InitBinder
    public void init(WebDataBinder binder){
        SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
        binder.registerCustomEditor(Date.class,new CustomDateEditor(dateFormat,true));
    }           

還有一種注解方法,簡單推薦。

參數pattern中寫時間格式

@DateTimeFormat(pattern = "yyyy-MM-dd")           

在控制器中還要寫

@Valid           

不管在bean中localdate,date都可以處理錯誤。

------20190103補充-------

轉為json需要其他jar輔助,

<!--jsr303時間類型轉json-->
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.9.4</version>
</dependency>
      
<!--json-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.7</version>
</dependency>      

bean類轉時,還需要去掉不需要轉換的json,例如handler,debug可以看出來不需要的屬性

@JsonIgnoreProperties({"handler"})      

時間類型也需要加上特定注解

@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")