HTTP Status 400 (HTTP400状态码)

异常信息记录_2019-11-16

HTTP Status 400 – 错误的请求

前两天写了一个关于时间格式转换的400错误的请求的博客,给公司的大佬看了一下,被吐槽……特此修改一下。

1、问题分析

HTTP 400的状态码,可以统称前后台对应不上,主要有两种形式:

一、bad request 意思是 “错误的请求”

HTTP Status 400 (HTTP400状态码)_第1张图片

> ==Type== Status Report
> ==描述== 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。
> Apache Tomcat/8.5.46

通常产生问题的原因也有两个:
①前端传的参数类型或者名称与后台接收参数的实体类的属性类型或者名称不一致;
②前端提交ajax请求的数据应该是json格式字符串的,但是却没有将对象转换成json格式的字符串。

二、invalid hostname 意思是 “不存在的域名/无效的主机名”。

但是基于本仙女目前并没有遇到过这种情况,所以等以后遇到了再来补充。

2、解决方案

①前端传的参数类型或者名称与后台接收参数的实体类的属性类型或者名称不一致

前后台参数类型或者名称不一致的解决方案就是保证参数的类型和名称一致即可。下面将以一个小项目中出现的时间类型转换问题作为栗子具体解析一下

时间格式转换栗子:
字符串无法自动转换成Date类型
项目中需要的是Date类型的日期,但是前端传过来的数据是字符串类型的。
HTTP Status 400 (HTTP400状态码)_第2张图片

解决方法
解决问题的思想无非就是把String类型的日期格式转成Date类型,方案有两种:
A、自定义类型转换器
(1)写一个自定义类型转换器,定义转换格式
HTTP Status 400 (HTTP400状态码)_第3张图片
(2)在springmvc.xml文件中配置自定义类型转换器
HTTP Status 400 (HTTP400状态码)_第4张图片
(3)在Controller中接收字符串,手动转换成Date类型再设置到封装的实体类中去。
HTTP Status 400 (HTTP400状态码)_第5张图片

B、直接在实体类上添加注解:

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

HTTP Status 400 (HTTP400状态码)_第6张图片
这种方法既简单又实用,不需要配置文件也不需要手动写转换器,体现了注解的强大。

②前端提交ajax请求的数据应该是json格式字符串的,但是却没有将对象转换成json格式的字符串

这个问题解决的方案也非常简单,只要使用一个方法将对象转成json格式的字符串即可。这个方法就是 JSON.stringify() 方法,它能将 JavaScript 对象转换为字符串。
参照菜鸟教程中的语法:
HTTP Status 400 (HTTP400状态码)_第7张图片

let  = 从Controller层返回的对象;
//将对象转换成json格式的字符串
let dataAsJson = JSON.stringify(data);

你可能感兴趣的:(Java)