gpt4 book ai didi

java - Spring MVC - @ModelAttribute 与 Long 类型

转载 作者:行者123 更新时间:2023-11-30 08:09:44 25 4
gpt4 key购买 nike

我正在尝试使用方法参数上的注解 @ModelAttribute 注入(inject)模型属性。

@RequestMapping({"/", "/index"})
public String home(Principal principal, Model model, @ModelAttribute("commerceId") Long commerceId) {
if (commerceId == null) {
LOGGER.info("Initializing commerce code...");
String name = principal.getName();
commerceId = Long.parseLong(name);
model.addAttribute("commerceId", commerceId);
}
return "index";
}

但我总是得到下一个异常:

java.lang.NoSuchMethodException: java.lang.Long.<init>()

我可以看到 spring 正在尝试使用无参数构造函数创建 Long 值,但显然它会失败,因为 Long 类型没有无参数构造函数。

为什么 Spring 无法使用 @ModelAttribute 正确创建 Long 类型?可以使用 @ModelAttribute 注入(inject)任何 Wrapper 类型(Integer、Long 等)吗?

我正在使用 Spring 3.1.1

最佳答案

例如:

@ModelAttribute("peson") Person person 

首先,它尝试使用无参数构造函数创建一个 Person 对象。然后它调用 setter 方法来设置/填充各个属性的值。

如果是

@ModelAttribute("commerceId") Long commerceId

没有无参数的构造函数,也没有设置值的setter方法。 Primitive Wrapper 类提供 arg-base 构造函数,也没有 setter 方法。因为一旦你初始化它,它就不允许你改变这个值。

尝试使用 @RequestParam("commerceId") Long commerceId

关于java - Spring MVC - @ModelAttribute 与 Long 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com