spring mvc的请求流程

        最近项目遇到了一个400的错误,如下:

 org.springframework.web.client.HttpClientErrorException: 400 null

at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:78)

at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613)

at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:380)

如果通过浏览器访问,会显示400错误,表示请求格式错误。

    环境:通过org.springframework.web.client.RestTemplate访问spring mvc发布的RESTful服务。

    调试发现没有进入controller。那就是在spring mvc框架内就报错了。

    spring mvc的入口是DispatcherServlet,通过这个类对请求进行调度。

    请求流程如下:

    1,通过url找到对应的Method,Method映射在程序启动的时候已经完成映射。这个过程中会根据Controller的名字调用BeanFactory获得Controller对象,代码如下:

《spring mvc的请求流程》

    2,根据request中请求参数组装Method的参数

    3,调用Method方法,传入第2步生成的参数,并返回结果,这个过程调用了我们写的controller

    4,处理生成结果并返回。

    上面发生的异常发生在第2步,因为Method的参数是一个对象,组装参数的时候,需要进行类型转换,如果类型转换失败就会产生400异常,然后就没有进入第3步,也就没有进入我们写的controller。

     具体错误是,时间转换,通过RestTemplate请求的时候,将时间类型转成数字类型,然后发出,虽然接收端Method参数对应的属性标注了转换格式,但是格式不对,最终导致错误。

     所以以后如果遇到400错误可以直接在类型转换的代码打断点调试,就能很快找到问题。

《spring mvc的请求流程》

    原文作者:Spring MVC
    原文地址: https://blog.csdn.net/wk022/article/details/80929928
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞