HTTP 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).

译:由于被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或将不会处理请求。

引起的主要原因:

1、页面请求参数类型与后端不匹配   

 

2、无效的请求方法:服务器不支持前端发送的请求方法(如GET、POST、PUT、DELETE等)

3、服务器端校验失败:服务器端对请求进行了校验,发现请求不符合要求,因此返回400错误。

解决方式:

        首先针对本人遇到的问题。由于前端传入了一个时间参数 1986-05-04,导致在前端就直接报400,也没有进入到后端接口中。奇葩的是,换个时间就丝毫不受影响。一切正常。

分析下原因:

        极大可能是因为夏令时引起的。当时间为1940-06-03、1941-03-16、1986-05-04、1987-04-12、1988-04-10、1989-04-16、1990-04-15、1991-04-14这些就可能有问题。原来的方式是加的 @DateTimeFormat注解,特殊日期就会报400。

@DateTimeFormat只能处理后端到前端阶段(出参),而我们前端到后端的阶段并没有进行处理。所以我们需要加上入参(前端到后端的处理过程)前端到后端的部分则可以用@JsonFormat注解。

    @DateTimeFormat(pattern="yyyy-MM-dd")
	@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
  	private Date birthday;

正常情况下,就已经搞定了。

但是,我的就还有问题。就是头铁。

我就在Controller层里写了个方法将Date类型参数进行转换。并将实体中的@DateTimeFormat、@JsonFormat注释

/*通过@InitBinder注解的initBinder方法注册了一个自定义的PropertyEditor,用于将字符串转换为*Date对象
*PropertyEditorSupport它提供了PropertyEditor接口的实现,用于处理属性的编辑和转换
*/
@InitBinder
	public void initBinder(WebDataBinder binder) {
		//Date 类型转换
		binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
			@Override
			public void setAsText(String text) {
				if (StringUtils.isEmpty(text)) {
					return;
				}
				setValue(DateUtils.parse(text, Arrays.asList(PARSE_PATTERNS)));
			}
		});
	}

	public final static String[] PARSE_PATTERNS = {
			"yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd", "yyyy-MM",
			"yyyy/MM/dd HH:mm:ss.SSS", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM/dd", "yyyy/MM",
			"yyyy.MM.dd HH:mm:ss.SSS", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM.dd", "yyyy.MM",
			"yyyyMMddHHmmssSSS", "yyyyMMddHHmmss", "yyyyMMddHHmm", "yyyyMMdd", "yyyyMM"
	};

再次测试就ok了。

具体情况还需具体分析。此篇文章仅供参考。如有问题可私信或评论区指正。

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值