gpt4 book ai didi

java - 尝试使用枚举作为与 thymeleaf 一起使用的输入

转载 作者:行者123 更新时间:2023-12-01 16:18:06 24 4
gpt4 key购买 nike

当我尝试使用 thymeleaf 通过 html 页面发出 POST 请求时出现问题。 Controller 应该接收作为枚举的输入,但它会抛出错误:

java.lang.NoSuchMethodException: com.trade_analysis.model.StockSymbol.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3427) ~[na:na]"

我不知道哪里不好。我看过一些例子并尝试了很多东西,但我无法让它发挥应有的作用。

HTML:

<select class="form-item" th:field="${symbol}" required>
<option value="" selected disabled hidden id="default-symbol">Symbol</option>
<option class="dropdown-menu-button" th:each="symbolOption: ${symbols}" th:value="${symbolOption}" th:text="${symbolOption}"></option>
</select>

Java Controller :

    @GetMapping(value = "/stocks")
@PreAuthorize(value = "isAuthenticated()")
public String getStockPrices(Model model) throws UserNotFoundException {
User user = userService.getUserByUsername(getUsername());
String apiKey = user.getApiKey() == null ? "" : user.getApiKey();

model.addAttribute("apiKey", apiKey);
model.addAttribute("symbol", "");
model.addAttribute("symbols", asList(StockSymbol.values()));

return "stock-prices-preview";
}

@PostMapping(value = "/stocks")
@PreAuthorize(value = "isAuthenticated()")
public String stockPrices(@ModelAttribute String apiKey, @ModelAttribute StockSymbol symbol, Model model) {
model.addAttribute("apiKey", apiKey);
model.addAttribute("symbol", symbol);
model.addAttribute("symbols", asList(StockSymbol.values()));

return "stock-prices-preview";
}

“StockSymbol”枚举:

public enum StockSymbol {
GOOGL("GOOGL"),
MSFT("MSFT"),
AMZN("AMZN"),
IBM("IBM"),
CSCO("CSCO"),
AAPL("AAPL");

String sys;

StockSymbol(String sys) {
this.sys = sys;
}
}

前几行错误(完整错误为:https://pastebin.com/kg8RR7G6)

java.lang.NoSuchMethodException: com.trade_analysis.model.StockSymbol.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3427) ~[na:na]
at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2631) ~[na:na]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:216) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]

最佳答案

在您的 POST 处理程序中,您有以下行:

public String stockPrices(@ModelAttribute String apiKey, @ModelAttribute StockSymbol symbol, Model model) {

删除@ModelAttribute注释。您的问题是 Spring 在运行 Controller 方法时尝试实例化枚举。

使用@RequestParam按名称获取传入的POST参数。如果您的编译器不使用 -parameters 开关,您可能需要在注释中指定参数名称。

关于java - 尝试使用枚举作为与 thymeleaf 一起使用的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62351194/

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