【问题标题】:Why are String parameters always null in a Spring Boot 1.5 @Controller?为什么 Spring Boot 1.5 @Controller 中的 String 参数始终为空?
【发布时间】:2019-06-25 09:43:53
【问题描述】:

我将一个 Spring 4.1 应用程序(运行 I JBoss)迁移到 SpringBoot 1.5(Spring 4.3.7),之后,我们所有带有字符串参数的 MVC 控制器在调用时总是收到空值。

获得参数值集的唯一方法是用 StringBuilder 替换 String。

一个例子,不再工作了:

@RequestMapping(value = "/updateTime", method = RequestMethod.POST)
public String updateTime(@RequestParam(value="time") String time) {
  // time is null in SpringBoot
}

工作(StringBuffer 代替 String:

@RequestMapping(value = "/updateTime", method = RequestMethod.POST)
public String updateTime(@RequestParam(value="time") StringBuffer time) {
  // time has expected value
}

HTML:

<form name="updateTime" action="updateTime.html" method="post">
    Time: <input type="text" name="time" placeholder="YYYY-MM-DD HH:mm" value="${time}"/> <br/>
    <input type="submit" name="action" value="   Update   "/>
</form>

即使控制器中的字符串参数复合到请求对象中,我也会得到这种行为。

我在这里做错了吗?

【问题讨论】:

  • 为什么不选择 SpringBoot 1.5 以外的版本。 ?
  • @LahiruWijesekara:会的,采取中等步骤来避免 spring-security 和 ws-security 出现太多问题

标签: java spring-boot spring-mvc controller


【解决方案1】:

INFO:Spring 使用 HTML 名称属性。 您应该具有相同的名称和 RequestParam 值。 注意:在 HTML 表单操作中,最好也与 RequestMapping 值相同。 试试这个:

<form name="updateTime" action="/updateTime" method="post">
    Time: <input type="text" name="time" placeholder="YYYY-MM-DD HH:mm" value="${time}"/> <br/>
    <input type="submit" name="action" value="   Update   "/>
</form>

@RequestMapping(value = "/updateTime", method = RequestMethod.POST)
public String updateTime(@RequestParam(value="time") String time) {
  // time is null in SpringBoot
}

【讨论】:

  • 哦,对不起,我编辑了代码翻译成英文,只是忘记了一个地方。他们确实有相同的名字。
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 2016-12-24
  • 2019-03-13
  • 1970-01-01
  • 2017-10-14
  • 2020-04-19
  • 2021-01-18
  • 2017-09-01
相关资源
最近更新 更多