精华内容
下载资源
问答
  • 记一次接口使用json格式绑定参数失败的经历 控制台报错信息: Resolved [org.springframework....

    记一次接口使用json格式绑定参数失败的经历


    控制台报错信息:

    Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public void com.hwx.webtest.controller.ReqParamTestController.testPost2(com.hwx.webtest.req.ReqVo)]

    接口报错信息:

    {
    “timestamp”: “2021-04-18T08:30:32.863+00:00”,
    “status”: 400,
    “error”: “Bad Request”,
    “message”: “”,
    “path”: “/testPost2”
    }

    当你确保了请求方式是POST,请求参数也是用了@RequestBody绑定,还报错的话,想一下是不是在别的地方获取了参数(我就是在拦截器用request的输入流读了参数)。
    贴一下我找到的一针见血指出我错误的回答
    在这里插入图片描述
    当我在拦截器用request.getInputStream(),读取了参数,之后spring尝试给@RequestBody修饰的形参绑定数据时就读取不到参数了,所以报了这个错误。
    本文章只写到这里,对于多次读取的解决方法不记录了,浏览器搜request中inputStream多次读取,就已经有很多优秀的相关文章了。

    展开全文
  • 你可以使用 @RequestParam 注解将请求参数绑定到你控制器的方法参数上。下面这段代码展示了它的用法:package com.pudding.controller;import org.springframework.stereotype.Controller;import org.springframew.....

    正版2本grasshopper入门晋级手册

    101.5元

    包邮

    (需用券)

    去购买 >

    3a9e48921ec5a68225fc746f9658e578.png

    你可以使用 @RequestParam 注解将请求参数绑定到你控制器的方法参数上。

    下面这段代码展示了它的用法:

    package com.pudding.controller;

    import org.springframework.stereotype.Controller;

    import org.springframework.web.bind.annotation.GetMapping;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RequestParam;

    @Controller

    public class EditPetForm {

    @GetMapping("/pets")

    public String setupForm(@RequestParam int petId) {

    System.out.println(petId);

    return "petForm";

    }

    }

    若参数使用了该注解,则该参数默认是必须提供的,但你也可以把该参数标注为非必须的:只需要将 @RequestParam 注解的 required 属性设置为 false 即可:

    package com.pudding.controller;

    import org.springframework.stereotype.Controller;

    import org.springframework.web.bind.annotation.GetMapping;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RequestParam;

    @Controller

    public class EditPetForm {

    @GetMapping("/pets")

    public String setupForm(@RequestParam(value = "petId", required = false) Integer petId) {

    System.out.println(petId);

    return "petForm";

    }

    }

    注意:这里使用的 required = false 是将请求的参数设置为 null ,所以方法里的参数需要为引用类型(Integer),如果使用的是基本类型(int)会出现以下错误:

    java.lang.IllegalStateException: Optional int parameter 'petId' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.

    java 11官方入门(第8版)教材

    79.84元

    包邮

    (需用券)

    去购买 >

    f0f3f55624fb396b1764d42d6df88864.png

    展开全文
  • 然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springmvc中如何接收前台页面的参数,即springmvc中的参数绑定问题。1. 参数绑定的...

    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springmvc中如何接收前台页面的参数,即springmvc中的参数绑定问题。

    1. 参数绑定的过程

    我们可以回忆一下,在struts2中,是通过在Action中定义一个成员变量来接收前台传进来的参数,而在springmvc中,接收页面提交的数据是通过方法形参来接收的。从客户端请求的key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了。来看一下这个过程:

    70317eca066caaacf7894f734b0ac6c7.png 

    所以我们知道,是springmvc提供了很多转换器来将页面参数绑定到controller方法的形参上,关于自定义converter,我下面会提到。大概了解了该过程后,下面开始做具体的总结。

    2. 默认支持的类型

    springmvc中,有支持的默认类型的绑定。也就是说,直接在controller方法形参上定义默认类型的对象,就可以使用这些对象。

    HttpServletRequest对象

    HttpServletResponse对象

    HttpSession对象

    Model/ModelMap对象

    在参数绑定过程中,如果遇到上面类型就直接进行绑定。也就是说,我们可以在controller的方法的形参中直接定义上面这些类型的参数,springmvc会自动绑定。这里要说明一下的就是Model/ModelMap对象,Model是一个接口,ModelMap是一个接口实现 ,作用是将Model数据填充到request域,跟ModelAndView类似,关于它的使用,我在下面和简单类型参数绑定一起说。

    3. 简单类型的绑定

    总结这个还是以需求为例吧,这样比较容易理解,假设现在有个需求:根据商品的id来修改对应点商品信息。所以前台页面肯定要传进来该商品的id,然后springmvc的controller进行处理,返回一个修改商品信息的页面。关于前台页面的东西都很简单,我就不贴代码了,主要部分截个图,具体的代码在文章最后有下载地址。

    前台页面通过url将参数传递过来,请求的是editItems.action。

    4c8118be24ae391abbe9ef05153cd2f9.png 

    下面写controller中的editItems方法:

    @RequestMapping("/editItems")

    public String editItems(Model model, Integer id) throws Exception {

    //根据id查询对应的Items

    ItemsCustom itemsCustom = itemsService.findItemsById(id);

    model.addAttribute("itemsCustom", itemsCustom);

    //通过形参中的model将model数据传到页面

    //相当于modelAndView.addObject方法

    return "/WEB-INF/jsp/items/editItems.jsp";

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    这是个很简单的demo,从上面的代码中可以看出model可以直接作为参数,springmvc默认会绑定它,然后使用model将查询到的数据放到request域中,这样就可以在前台页面取出该数据了。

    要注意一点的是,简单类型的绑定中,方法形参中的参数名要和前台传进来的名一样才能完成参数的绑定。那有人要问了,如果有特殊需求(比如更好的可读性?),这里定义的参数名就是不一样,那咋整呢?有解决办法么?有!我们可以使用注解@RequestParam对简单的类型进行参数绑定,如下:

    64f54053461d28861de0a2e97a069206.png

    所以说,如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。通过@RequestParam中的required属性指定参数是否必须要传入,如果设置为true,没有传入参数就会报错。

    4. pojo类型的绑定

    4.1 普通pojo类型

    再来总结下pojo类型的绑定,继续上面的案例,当页面展示了商品详细信息后,我做了修改,然后点击提交,后台应该将我提交的这些参数全部更新到数据库的items表中,也就是说,我提交的这些参数要绑定到Items对象或者其扩展对象中。先看一下Items中都有哪些属性:

    fd5f32d2170c6dc9f23e351e0292e2d9.png

    可以看到,有各种类型的属性,当我们提交后,要将这些属性全部封装到一个pojo中,然后去更新数据库。

    绑定很简单,对于基本类型,要求页面中input标签的name属性值和controller的pojo形参中的属性名称一致,即可将页面中数据绑定到pojo。也就是说前台页面传进来的name要和要封装的pojo属性名一模一样,然后就可以将该pojo作为形参放到controller的方法中,如下:

    9c7d2c05d50e96ebde9024b71b49bd5a.png

    这样就能将前台表单传进来的不同属性值封装到ItemsCustom中了。但是运行一下就会发现报错,报错的信息是无法将String类型转换成java.util.Date类型,因为上面Items中有一个属性是Date类型的createtime。这就需要我们自己定义转换器了,这也是这部分的重点,下面我们自己定义一个日期转换器:

    //需要实现Converter接口,这里是将String类型转换成Date类型

    public class CustomDateConverter implements Converter {

    @Override

    public Date convert(String source) {

    //实现 将日期串转成日期类型(格式是yyyy-MM-dd HH:mm:ss)

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    try {

    //转成直接返回

    return simpleDateFormat.parse(source);

    } catch (ParseException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    //如果参数绑定失败返回null

    return null;

    }

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    定义好了转换器后,需要在springmvc.xml中进行如下配置:

    cbf3fb1d975b6794e7213a79600ea650.png 

    d2bce6c10dd9bb86336c35c3c2cafbed.png

    现在就可以了,springmvc就能根据这个转换器将String类型正确转换成Date类型,然后封装到ItemsCustom中去了。

    这里说一个小小的插曲:修改商品详细信息后提交,可能会有中文乱码问题,表达提交都是post方式,springmvc中关于post方式的中文乱码问题可以在web.xml中配置一个过滤器来解决,如下:

    9da9437e2a52d10f26a29db17a06dde0.png

    4.2. 包装的pojo类型

    这个包装类型pojo与上面普通的pojo有啥区别呢?包装类型pojo指的是pojo中有另一个也是pojo的属性,即pojo套pojo,为什么会设计这种pojo呢?在前面的博文中我也有提到,这种组合的设计方法对于后期程序的扩展很有用,比如复杂的查询条件就需要包装到这种包装类型中。

    那么该如何绑定呢?有两个思路:

    在形参中添加HttpServletRequest request参数,通过request接收查询条件参数。

    在形参中让包装类型的pojo接收查询条件参数。

    第一种方式就跟原始servlet差不多,这里使用第二种方法,我们传进来一个包装类型的pojo。看一下这个包装类型的pojo:

    62865e63e5e32fc2e2d2fcd57df1fd1d.png 

    这个包装pojo中还有一个ItemsCustom类,这个类继承了Items类,并且用来扩展与Items相关的User对象中的相关信息。所以这个ItemsCustom中有name属性,假如我们要想将前台传进来的name属性封装到ItemsCustom中的name属性中,该如何传入呢?这就是包装类型的pojo参数绑定问题。

    很简单,在前台我们可以通过这种方式来传:

    1cb2a829330c46ef981e4e8b0ef3d9c1.png 

    然后controller中方法的形参传入包装类型的pojo,即ItemsQueryVo,打个断点,即可查看值有没有传进来。如下:

    ad4e23784082227127c73587ec065c43.png 

    这样就能根据用户传进来的参数,进行复制的查询操作了。

    5. 集合类型的绑定

    5.1 数组的绑定

    数组的绑定指的是前台传来多个同一类型的数据,我们在controller中使用数组形参来接收前台传来的数据。还是以案例来驱动这部分内容,比如现在我们要批量删除商品,那么我们需要勾选好几个商品,这些商品都有id号,在controller中,我们需要将这些id号全部获取并放到一个数组中,然后再根据数组中的id号挨个删除数据库中对应的项。那么该如何绑定呢?其实也很简单,如下:

    controller的方法定义为:

    25fd12e3169c5703d7cff8c7c2995c32.png 

    对应前台传入的参数为:

    a8e56ad33b44259bdbb28d9e9e3ea83d.png 

    这样就能将前台传入的多个id绑定到数组中,然后我们就可以从数组中拿出要删除的商品的id了。

    5.2 List的绑定

    通常在需要批量提交数据时,将提交的数据绑定到list中,比如:成绩录入(录入多门课成绩,批量提交),在这里我们假设有需求:批量商品修改,在页面输入多个商品信息,将多个商品信息提交到controller方法中,即一次性更新多个商品信息。

    所以思路是在扩展类ItemsQueryVo中新添加一个List,然后将不同商品的信息都存到这个List中,所以修改如下:

    67643c00527da4f2716eea55f35fc6bc.png 

    controller方法的定义:

    1、进入批量商品修改页面

    2、批量修改商品提交

    所以controller中应该有两个方法,如下:

    b592c24cab03d7de00be9596aa4ad473.png 

    前台jsp页面中是如何传入参数的呢?这是我们所关心的问题,因为后台形参中接收数据用的就是包装类ItemsQueryVo。看下面:

    0aaca9a331e54092d6ae7cbff3f9e13c.png 

    所以我们知道了,前台是通过类似于list[i].name这种形式来传递参数的。list[i]表示第i个ItemsCustom,然后 list[i].属性 表示第i个ItemsCustom中对应的属性。

    5.2 Map的绑定

    Map的绑定其实和List的绑定是差不多的,首先也是在包装的pojo中新添加一个Map类型的属性,如(我随便举个例子,跟本例无关了)

    Public class QueryVo {

    private Map itemInfo = new HashMap();

    //get/set方法..

    }

    1

    2

    3

    4

    关键是前台传参的时候和List不太一样,Map是这样传的,比如:

    学生信息:

    姓名:

    年龄:

    .. .. ..

    1

    2

    3

    4

    5

    6

    7

    8

    我们可以看到,Map的参数绑定传来的是Map中的key,然后value会自动绑定到Map中的那个对象的属性中。在controller中的方法里,形参就直接使用QueryVo接收即可,也很简单。

    关于springmvc的参数绑定基本就总结到这了,其实原理都差不多,只是针对于不同的类型,绑定的方式有些区别而已,多想想多写写,基本就能掌握这些了。

    转载地址:http://blog.csdn.net/eson_15/article/details/51718633

    展开全文
  • 在项目中使用Vue+SpringBoot框架进行开发,当前台传递的参数中有对应后台实体类的Date时间类型的时候,SpringBoot会自动绑定失败 Vue前端代码: 使用的element ui框架写的表单: <el-col :span="12"> <el-...

    错误原因:

    在项目中使用Vue+SpringBoot框架进行开发,当前台传递的参数中有对应后台实体类的Date时间类型的时候,SpringBoot会自动绑定失败

    Vue前端代码:
    使用的element ui框架写的表单:

    <el-col :span="12">
     <el-form-item label="成立时间" prop="estaTime" label-width="130px">
        <el-date-picker
          v-model="enterprise.estaTime"
          type="date"
          value-format="yyyy-MM-dd"
          placeholder="选择日期">
        </el-date-picker>
      </el-form-item>
    </el-col>
    

    页面效果:
    在这里插入图片描述
    其中,value-format=“yyyy-MM-dd” 进行时间格式化,如果不加,则默认时间为格林威治时间格式,请注意
    提交表单代码如下:

    submit('save', this.enterprise).then(res => {
      if (res.data.success) {
        this.formVisible = false;
        this.$message({
          type: 'success',
          message: '操作成功!'
        })
        bus.$emit('toCompanyTable', true);
      } else {
        this.$message({
          type: 'error',
          message: res.data.msg
        })
      }
    })
    

    在往后台提交时,结果提示错误
    在这里插入图片描述
    解决办法:
    写一个配置类,使用@Configuration注解交给SpringBoot进行管理:

    package org.springblade.common.utils;
    
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.convert.converter.Converter;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    @Configuration
    public class StringToDateConverter implements Converter<String, Date> {
    	private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";
    	private static final String shortDateFormat = "yyyy-MM-dd";
    	private static final String dateFormat2 = "yyyy/MM/dd HH:mm:ss";
    	private static final String shortDateFormat2 = "yyyy/MM/dd";
    
    	@Override
    	public Date convert(String source) {
    		if (StringUtils.isBlank(source)) {
    			return null;
    		}
    		source = source.trim();
    		try {
    			SimpleDateFormat formatter;
    			if (source.contains("-")) {
    				if (source.contains(":")) {
    					formatter = new SimpleDateFormat(dateFormat);
    				} else {
    					formatter = new SimpleDateFormat(shortDateFormat);
    				}
    				Date dtDate = formatter.parse(source);
    				return dtDate;
    			} else if (source.contains("/")) {
    				if (source.contains(":")) {
    					formatter = new SimpleDateFormat(dateFormat2);
    				} else {
    					formatter = new SimpleDateFormat(shortDateFormat2);
    				}
    				Date dtDate = formatter.parse(source);
    				return dtDate;
    			}
    		} catch (Exception e) {
    			throw new RuntimeException(String.format("parser %s to Date fail", source));
    		}
    
    		throw new RuntimeException(String.format("parser %s to Date fail", source));
    
    	}
    }
    
    

    StringUtils为apache lang3包

    重启项目,问题解决,参数传递成功!

    以此记载,谨防忘记!

    转载自:https://blog.csdn.net/weixin_39270764/article/details/81808152

    展开全文
  • Go-Gin参数绑定

    2021-03-25 12:59:41
    Gin参数绑定 在web层,对于前端传参后端如何解析是一个比较重要的问题。对于Http协议来讲,网络请求有很多方法:GET,POST,DELETE,PUT。。。那么参数绑定怎做呢? 回忆杀 首先回忆一下Java怎么解析参数 古老的Servlet ...
  • 摘要:在《PDO中预处理语句占位符的使用​》已经介绍了参数绑定方法bindParam(),冒号‘:’占位符和问号‘?’都可以使用这个方法绑定参数,而且还可以指定绑定参数的类型,再次确保在执行sql中传入参数的安全性。PDO...
  • package main import ( "fmt" "github.com/gin-gonic/gin" ...) type UserInfo struct { Username string Age int ... r.POST("/form", func(c *gin.Context) { ... // 参数绑定 err := c.ShouldBind(&u) .
  • 正常情况下,前端传递来的参数都能直接被SpringMVC接收,但是也会遇到一些特殊情况,比如Date对象,当我的前端传来的一个日期时,就需要服务端自定义参数绑定,将前端的日期进行转换。自定义参数绑定也很简单,分两...
  • 下面我简单的写一下这个函数: /** * 模拟简单的绑定参数过程 * * @param string $sql SQL语句 * @param int $location 问号位置 * @param mixed $var 替换的变量 * @param string $type 替换的...
  • 参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller ?这在实际项目开发中也是用到的最多的,那么 SpringMVC 的参数绑定是怎么实现的呢?下面我们来详细的讲解。1、...
  • 对于不同的参数解析方式,Spring 抛出的异常也不同,而且这些异常没有继承关系,异常的内部也各不相同,只能对每种异常单独处理。感觉这块地方 spring 没有设计好,处理起来比较麻烦。跟参数相关的异常主要有三个...
  • 可以对架构函数进行参数绑定,当前请求的路由变量可以自动绑定到架构函数的参数,例如: namespace app\index\Controller; class Blog { protected $name; public function __construct($name = null) {...
  • 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolver 方法参数解析器接口,这个接口是SpringMVC参数解析...
  • 本文来自网易云社区作者:苏甦对于使用多进程方式的Android应用程序,需要通过绑定服务获得绑定对象,进行进程间通信。在某些特殊情况下,会遇到绑定对象无法返回的问题。文中分析了问题发生的原因,给出了解决的...
  • 这不是SQL Developer的限制,它只是绑定变量的工作...它适用于单个值,如果您的小数分隔符是逗号,则为两个值提供奇数结果,并且对于任何其他值都会失败.您不能在绑定提示符下输入多个值,也不能使用单个绑定向in()提供多...
  • 参数绑定的定义所谓参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller。从客户端请求key/value数据(比如get请求中包含的数据),经过参数绑定,将key/value数据绑定到...
  • 当无线摄像机手机连接Wi-Fi成功,但绑定TP-LINK ID一直失败,由什么原因造成的呢?针对上述情况,可以从以下几个方面进行排查解决:1.路由器上做了限制,一键禁用上网解决方法:若监控摄像头被禁用上网则无法联网...
  • 导读在第二节,我们学习了Gin框架的路由定义与参数接收,今天应一位同学的要求,来讲解一下参数绑定与校验。为什么校验参数?本不必抛出这个问题的,但顾及到初出茅庐的同学,这里解释一下。假设做一个注册接口,...
  • 前言用注解@Validated、@Valid进行参数验证,相对于以前常用的if等条件,会显得简练很多,而且显得更加优雅。然后是他俩的区别@Validated:用在方法入参上无法单独提供嵌套验证功能,不能用在成员属性(字段)上,也...
  • 1、gin的安装使用(详细步骤) 2、路由冲突conflict 3、URL处理规则 4、gin请求参数以及参数绑定 5、gin静态文件加载、上传文件、路由组、中间件、模板与渲染
  • 直接运行cmd,运行arp -d * ,arp -s会出现下面的错误提示:ARP 项删除失败: 请求的操作需要提升。ARP 项添加失败: 拒绝访问。或提示:ARP 项添加失败: 请求的操作需要提升。(英文版提示:The ARP entry addition ...
  • Beego——数据绑定

    2020-12-25 02:14:53
    绑定普通变量2. 绑定切片 1. 绑定普通变量 BindVarController.go package controllers import ( "github.com/astaxie/beego" "strconv" ) type BindVarController struct { beego.Controller } router.go ...
  • 模型绑定是将 HTTP 请求中的数据映射到控制器操作方法上对应的参数。 http://localhost:13380/home/details/2,默认路由模板规则({controller = Home}/{action = Index}/{id?})路由将此请求发送到 HomeController
  • 二、请求参数绑定 2.1 准备工作 本节我们会用到HttpServletRequest、HttpServletResponse等关于servlet请求的类,需要引入servlet-api包依赖,这里有必要说明一点的是,java EE规范在2018年更名为Jakarta EE,相应...
  • 项目中,使用到了分页以及一些参数,分页单独写的绑定参数, type PageInfo struct { Page int `json:"page" form:"page"` PageSize int `json:"pageSize" form:"pageSize"` } 但现在我需要传另外的参数,如 ...
  • 如果在所有名称为f的方法中有一个参数类型和调用提供的参数类型最为匹配,那么就调用这个方法,这个过程叫做“重载解析” 当程序运行并且使用动态绑定调用方法时,虚拟机必须调用同x所指向的对象的实际类型相匹配的...
  • 携带三个参数为什么只有两个参数?4.请求头5.上传成功方法 需求:点击一个按钮,弹出对话框,有一个下拉选择框进行选择,并且将这个选择的值跟这个文件一起传给后台,并且不能为空,在点击上传全部操作完毕才可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 204,228
精华内容 81,691
关键字:

参数绑定失败