java - Spring MVC - @ModelAttribute 长类型

标签 java spring spring-mvc jakarta-ee

我正在尝试使用方法参数上的注释 @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/

相关文章:

java - 使用 Jersey 在 Java RESTful Web 服务中生成 JSON 和 XML 响应

java - 从文档加载本体花费了太多时间并且占用了我所有的内存空间

spring - 如何将 Spring Boot 与带有嵌入式 Tomcat 的 JSF 2.2 集成

java - json 提取/解码问题 - json 中的 json?

java - 将 XMLGregorianCalendar 转换为 LocalDateTime 时出现奇怪的结果

java - 自定义 ExceptionMapper 在 Spring + Jersey + Jetty 中不起作用

java - 无法在 spring bean 中注入(inject) DAO

spring - Postgres 空闲连接 : CannotAcquireResourceException

java - 如何在spring boot中启用浏览器缓存

java - Spring 自定义基于条件的验证