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

 更新时间:2021年08月17日 14:52:02   作者:challengelongyj  
这篇文章主要介绍了关于@RequestParam的使用所遇到的404问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@RequestParam的使用所遇到的404

问题困扰:

114028_3ZAw_3693384.png

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

问题所在及解决:

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

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

114341_v1dZ_3693384.png

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

以下附上controller类方法图:

下面是第一种方式:

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

114617_szzn_3693384.png

第二种方式:

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

114636_TlRc_3693384.png

@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方式

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

相关文章

  • idea out目录与target目录的区别详解

    idea out目录与target目录的区别详解

    这篇文章主要介绍了idea out目录与target目录的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • springboot整合shiro实现记住我功能

    springboot整合shiro实现记住我功能

    这篇文章主要介绍了springboot整合shiro实现记住我功能,配置类 ShiroConfig,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • spring使用RedisTemplate操作Redis数据库

    spring使用RedisTemplate操作Redis数据库

    这篇文章主要介绍了spring使用RedisTemplate操作Redis数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java中Static关键字的五种用法详解

    Java中Static关键字的五种用法详解

    这篇文章主要介绍了Java中static的五种用法:修饰成员变量,修饰成员方法,修饰内部类,静态代码块,静态导包,想详细了解的小伙伴可以参考阅读本文
    2023-03-03
  • java实现象棋小游戏

    java实现象棋小游戏

    这篇文章主要为大家详细介绍了java实现象棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 使用EasyPOI实现多sheet动态列导出

    使用EasyPOI实现多sheet动态列导出

    这篇文章主要为大家详细介绍了如何使用EasyPOI根据指定时间范围创建动态列,以及如何将数据组织成符合要求的格式并导出,感兴趣的可以了解下
    2025-03-03
  • Java swing创建一个窗口的简单步骤

    Java swing创建一个窗口的简单步骤

    这篇文章主要给大家介绍了关于Java swing创建一个窗口的简单步骤,Java Swing是Java平台下的GUI(Graphical User Interface,图形用户界面)工具包,提供了丰富的GUI组件,可以实现复杂的图形界面应用程序,需要的朋友可以参考下
    2024-06-06
  • Java扩展库RxJava的基本结构与适用场景小结

    Java扩展库RxJava的基本结构与适用场景小结

    RxJava(GitHub: https://github.com/ReactiveX/RxJava)能够帮助Java进行异步与事务驱动的程序编写,这里我们来作一个Java扩展库RxJava的基本结构与适用场景小结,刚接触RxJava的同学不妨看一下^^
    2016-06-06
  • logback使用MDCFilter日志过滤源码解读

    logback使用MDCFilter日志过滤源码解读

    这篇文章主要介绍了logback使用MDCFilter日志过滤源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 深入解析JVM之内存结构及字符串常量池(推荐)

    深入解析JVM之内存结构及字符串常量池(推荐)

    Java作为一种平台无关性的语言,其主要依靠于Java虚拟机——JVM,接下来通过本文给大家介绍JVM之内存结构及字符串常量池的相关知识,需要的朋友可以参考下
    2020-07-07

最新评论