• @RequestParam,@PathParam,@PathVariable,@QueryParam注解的使用区别,http请求报400错误的原因分析


           获取url模板上数据的(/{id})@DefaultValue 获取请求参数的(包括post表单提交)键值对(?param1=10&param2=20)、可以设置defaultValue
    JAX-RS @PathParam @QueryParam
    Spring @PathVariable @RequestParam

    有一次的请求是 :

    http://localhost:8080/system/getMenuListPage?level=0&parent_id=0&_=1532879287887

    后台返回400 BadRequest  。

    接收用的

        @RequestMapping(value = "getMenuListPage", method= RequestMethod.GET,produces = "text/html;charset=UTF-8")
        @ResponseBody
        public String getMenuListPage(Menu menu, @RequestParam(value="pageNumber") Integer pageNumber,
                @RequestParam(value="pageSize") Integer pageSize){  

    将@RequestParam 用 @QueryParam 替换后就返回 200.

    <--------------------------------   ------------------------>

    之后补:   发现@RequestParam 默认是required = true 。当此项参数不传时就被拒绝,返回400。可以改成如下:

        @RequestMapping(value = "getMenuListPage", method= RequestMethod.GET,produces = "text/html;charset=UTF-8")
        @ResponseBody
        public String getMenuListPage(Menu menu, @RequestParam(value="pageNumber", required = false) Integer pageNumber,
                @RequestParam(value="pageSize", required = false) Integer pageSize){  

    <--------------------------------   ------------------------>

    @RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @PathVariable 是从一个URI模板里面来填充。

    总结:http请求报400错误的原因分析

    在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里;

    原因:1)前端提交数据的字段名称或者是字段类型和后台的实体类不一致 或 前端提交的参数跟后台需要的参数个数不一致,导致无法封装;

             2)前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型;

    解决方案:

    1)对照字段名称,类型保证一致性

    2)使用stringify将前端传递的对象转化为字符串    data: JSON.stringify(param)  ;

  • 相关阅读:
    [转] Vue + Webpack 组件式开发(练习环境)
    [转] 从零构建 vue2 + vue-router + vuex 开发环境到入门,实现基本的登录退出功能
    [转] Redux入门教程(快速上手)
    [转] 前端数据驱动的价值
    [转] React风格的企业前端技术
    [转] 对Array.prototype.slice.call()方法的理解
    [转] webpack之plugin内部运行机制
    [转] 静态资源的分布对网站加载速度的影响/浏览器对同一域名下并发加载资源数量
    Mysql 版本号、存储引擎、索引查询
    linux 查看CPU、内存、磁盘信息命令
  • 原文地址:https://www.cnblogs.com/mobaids/p/9388312.html
Copyright © 2020-2023  润新知