关于@RequestParam的使用所遇到的404问题

目录
  • @RequestParam的使用所遇到的404
    • 问题困扰:
    • 问题所在及解决:
      • 下面是第一种方式:
      • 第二种方式:
  • @RequestParam注解在使用过程一些注意
    • 在项目开发过程的一些教训经验记录
    • 针对上述问题的解决办法
      • 1、修改接口定义中
      • 2、Post方式改为Get方式

@RequestParam的使用所遇到的404

问题困扰:

最近在学习springmvc,但是学习到@RequestParam的使用过程中,遇到了以上的404报错问题,让我很无奈,教程的可以,为什么我的不可以!!!此时有点烦躁!!!

问题所在及解决:

经过百度之后的说法也是一堆一堆的,最后得知是jsp页面传到controller类方法的形参类型不适合,jsp页面中写的是字符串,controller类方法的形参我写成了Integer类型(毕竟id定义成了Integer类型的)

下面附上jsp页面代码图:会发现value="/items/editItems.action?id='${item.id }'"中的id为字符串有单引 号'',这是错误的写法!!!

重点是这里:正确的应该是value="/items/editItems.action?id=${item.id }"去掉单引号即可

以下附上controller类方法图:

下面是第一种方式:

要求形参名称id与jsp中通过request传过来的参数名称一致

第二种方式:

不要求形参名称items_id与jsp中通过request传过来的参数名称一致,但是需要加上声明 @RequestParam(value="id")指定request传入参数名称和形参进行绑定

@RequestParam注解在使用过程一些注意

在项目开发过程的一些教训经验记录

http接口定义如下:

@RequestMapping(value="/fetchResData",method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE)
void fetchResData(
  @RequestParam(value = "id")Long id
 ,@RequestParam(value = "start") String start
 ,@RequestParam(value = "end") String end);

请求方式为POST,Content-Type是json格式,@RequestParam的required属性值默认是true。

客户端在调用该接口,正常传入参数值,但是请求没有进入服务端设置的断点。根据跟踪的异常提示如下:

{
  "timestamp": 1560339674464,
  "status": 400,
  "error": "Bad Request",
  "exception": "org.springframework.web.bind.MissingServletRequestParameterException",
  "message": "Required Long parameter 'id' is not present",
  "path": "/Service/fetchResData"
}

进一步分析客户端的请求体信息,如果接口使用@RequestParam绑定基本数据类型情况下,请求的参数是接在URL后面,消息体是没有数据的。而接口定义使用的consumes = MediaType.APPLICATION_JSON_VALUE。因此无法从消息体中获取有效的参数值。从而服务端认为接口参数是必填的,而实际情况是空值。

针对上述问题的解决办法

1、修改接口定义中

consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE 

等同于http中content-type为

Content-Type=mutipart/form-data和Content-Type=application/x-www-form-urlencoded

2、Post方式改为Get方式

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 对SpringMVC的@RequestParam的解释

    自SpringMVC4.2之后,RequestParam内部有4个参数: 1.String name 2.String value 3.boolean required 4.String defaultValue 其中name和value分别是对方的别名,即二者没区别,我个人比较喜欢用name,因为它的某些特性使得name这个名字更直观,下面会说到. 先看第一个映射方法的定义: @RequestMapping("/paramTest0") public @ResponseBody St

  • SpringMVC注解@RequestParam方法原理解析

    一.作用 作用在方法传递的参数前,用于接收所传参数 例如:http://localhost:8081/selectStudentById?id=01 接收问号后面的参数值(允许多个参数) 二.注解内部的四个属性 1.name 指定传入的参数名称,其后面跟的参数名称一定要与前端传入的参数名称一致 2.value 指定传入的参数名称,其后面跟的参数名称一定要与前端传入的参数名称一致 3.requred 指定参数是否是必传参数,如果不指定,默认为true 4.defaultValue 指定参数的默认值

  • 浅谈@RequestParam 参数是否必须传的问题

    一.源码展示 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestParam { @AliasFor("name") String value() default ""; @AliasFor("value") String name() default ""; boolea

  • SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型

    SpringMvc 中@RequestParam注解使用 建议使用包装类型来代替基本数据类型 public String form2(@RequestParam(name="age") int age){ public String form2(@RequestParam(name="age") Integer age) { 上述两种方式 这种情况下使用起来基本没有差别,但是为什么要说建议使用包装类型而不是基本类型呢? 一.@RequestParam属性作用 因为当

  • 详解spring cloud Feign使用中遇到的问题总结

    本文介绍了spring cloud Feign使用中遇到的问题总结,分享给大家,具体如下: 问题一: 在前面的示例中,我们讲过 @RequestMapping(value = "/user/{id}", method = RequestMethod.GET) @GetMapping("/user/{id}") 这两个注解的效果是等价的,但是在Feign使用中,只能用上面的那种方式,不能直接用@GetMapping,下面我们将前面的那个示例中,改成@GetMappin

  • 关于@RequestParam的使用所遇到的404问题

    目录 @RequestParam的使用所遇到的404 问题困扰: 问题所在及解决: 下面是第一种方式: 第二种方式: @RequestParam注解在使用过程一些注意 在项目开发过程的一些教训经验记录 针对上述问题的解决办法 1.修改接口定义中 2.Post方式改为Get方式 @RequestParam的使用所遇到的404 问题困扰: 最近在学习springmvc,但是学习到@RequestParam的使用过程中,遇到了以上的404报错问题,让我很无奈,教程的可以,为什么我的不可以!!!此时有点

  • SpringBoot前后端json数据交互的全过程记录

    目录 一.参考文献 二.勇敢尝试 三.最终选择交互方式 总结 一.参考文献 原生Ajax与JQuery Ajax SpringMVC接受JSON参数详解及常见错误总结 提交方式为 POST 时, JQuery Ajax 以 application/x-www-form-urlencoded 上传 JSON对象 , 后端用 @RequestParam 或者Servlet 获取参数. JQuery Ajax 以 application/json 上传 JSON字符串, 后端用 @RquestBody

  • Spring cloud踩坑记录之使用feignclient远程调用服务404的方法

    前言 公司项目进行微服务改造,由之前的dubbo改用SpringCloud,微服务之间通过FeignClient进行调用,今天在测试的时候,eureka注册中心有相应的服务,但feignclient就是无法调通,一直报404错误,排查过程如下: 一.问题: 服务提供方定义的接口如下: /** * 黑白名单查询接口 * * @author LiJunJun * @since 2018/10/18 */ @Component(value = "blackAndWhiteListFeignClient

  • 解决springboot集成swagger碰到的坑(报404)

    一:项目使用springboot集成swagger进行调试 配置swagger非常简单,主要有三步: 1.添加swagger依赖 <!-- 引入 swagger等相关依赖 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> <

  • SpringMVC项目访问controller时候报404的解决

    目录 SpringMVC访问controller时候报404 在网上搜各种方法都没有解决 终于解决 SpringMVC 无法访问到controller的可能原因 从网上查的资料 SpringMVC访问controller时候报404 自己写的SpringMVC项目,突然发现访问controller路径的时候页面显示404,看控制台也没有报严重错误,只是说该路径找不到,并且单独访问jsp也能正常访问. 控制台报这种错误 No mapping found for HTTP request with

  • 类添加注解@RequestMapping报错HTTP Status 404的解决

    目录 类添加注解@RequestMapping报错HTTP Status 404 springMVC使用@RequestMapping遇到的问题 1.简介 2.属性简介 3.测试使用时遇到的问题 解决后的源码是 类添加注解@RequestMapping报错HTTP Status 404 为类添加了@RequestMapping注解后,运行报错404,路径不对,找了半天才发现原来是我的视图解析器的前缀没有写正确 在WEB-INF前面少加了一个/,加上之后运行ok springMVC使用@Reque

  • Spring Boot中@RequestParam参数的5种情况说明

    目录 Spring Boot中@RequestParam参数的5种情况 实例如下: Spring Boot注解:@RequestParam详解 1.value:参数名字,即入参的请求参数名字 ​2.required:该参数是否为必传项. ​3.defaultValue:参数的默认值 Spring Boot中@RequestParam参数的5种情况 实例如下: // 可带参数可不带参数,方法都能执行 @RequestMapping("/list") public String test1

  • 关于@RequestParam注解的使用(简单易懂)

    目录 @RequestParam注解使用 1.作用 2.语法 3.测试环境 4.工程结构 5.业务处理器HelloController.java 6.测试 @RequestParam与@Param区别 @RequestParam注解使用 1.作用 @RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解) 2.语法 语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””

  • 利用404错误页面实现UrlRewrite的实现代码

    将下面代码保存到err404.html,然后设置404错误页面为err404.html页: 复制代码 代码如下: <script type="text/javascript" language="javascript"> var id=/(detial|show)\.asp\?id\=([0-9]+)/gi; var flag=/([a-z0-9_]+)\.asp\?flag\=xml/gi; var re_id=/(detial|show)\_([0-

  • Nginx配置React项目Url后直接输入路由路径时报404问题的解决

    前言 如今react应用普遍,最近在配置react项目中遇到了一个问题,通过查找相关的资料终于找到了解决的方法,所以想着总结一下分享出来给有需要的朋友们,下面话不多说了,来一起看看详细的介绍吧. 发现问题 大家都知道,当我们写完项目后,要对项目进行部署,我的配置很简单 location /demo { root E:/; index index.html index.htm; } 这样配置的有一个问题,只能 http://localhost/demo/来访问. 如果想访问里面的其它界面如 htt

随机推荐