我正在尝试使用方法参数上的注释 @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 类型? 任何 Wrapper 类型(Integer、Long 等)都可以用 @ModelAttribute 注入(inject)吗?
我使用的是 Spring 3.1.1
最佳答案
例如:
@ModelAttribute("peson") Person person
首先,它尝试使用无参数构造函数创建一个 Person 对象。然后它调用 setter 方法来设置/填充相应属性的值。
如果出现
@ModelAttribute("commerceId") Long commerceId
没有无参数构造函数,也没有设置值的 setter 方法。 Primitive Wrapper 类提供基于 arg 的构造函数,也没有 setter 方法。因为一旦初始化它,它就不允许您更改该值。
尝试使用@RequestParam("commerceId") Long commerceId
关于java - Spring MVC - @ModelAttribute 长类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214958/