簡體   English   中英

嘗試使用枚舉作為與 thymeleaf 一起使用的輸入

[英]Trying to use an enum as an input working with thymeleaf

當我嘗試使用 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控制器:

    @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開關,您可能需要在注釋中指定參數名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM