【发布时间】:2020-06-12 19:30:38
【问题描述】:
当我尝试使用 thymeleaf 通过 html 页面发出 POST 请求时出现问题。控制器应该以枚举的形式接收输入,但它会引发错误:
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 控制器:
@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]
【问题讨论】:
-
enum不是股票代码的好选择。每次您想添加或删除股票时,您都必须重新编译代码。 -
我认为我不会经常更改这些符号,出于我的目的,我宁愿坚持使用枚举,但我会考虑这个选项。
标签: java spring spring-boot enums thymeleaf