尝试使用 PathVariable 传递参数会导致错误无法将类型“java.lang.String”的值转换为所需类型“java.lang.Long”

问题描述 投票:0回答:1

我正在为我的父母构建这个简单的应用程序,以便更轻松地“检查清单”已支付的账单。我自己构建了它(免费,呃),作为练习的手段和真正的工作流程角色扮演。一切都很顺利,除了一些小错误,但这一次我已经被困了几天,只是无法解决这个问题......

我尝试使用 @PathVariable 传递参数,以设置一些默认值,例如类型和城市。其他一切都是可以修改的,并且不应该有默认值。现在,我创建了 3 张卡片,每张卡片代表自己的城市,并带有一个下拉列表,用于选择您想要保存、写入的帐单类型,无论您如何称呼它。现在,下拉列表中的每个

<li>
都是一种类型。类型是账单的名称,例如:水、互联网、垃圾收集等。标准的东西...现在我的想法是让每个
<li>
都是可点击的,这样当你点击它时,你会会重定向到已为您填充类型和城市的页面,您只需填写其余部分,例如价格和描述。

我正在使用 Java Spring Boot 和 Thymeleaf(我不想使用 Thymeleaf 以外的其他东西,因为我想尝试学习一下)。

这是有问题的代码:

控制器:

@GetMapping("/racuni")
    public String getRacuniTemplate(Model model){
        return racunService.getTemplates(model);
    }

@GetMapping("/racun/new/{type}/{city}")
    public String createRacunForm(Model model, @PathVariable String type, @PathVariable String city) {
        return racunService.createRacunForm(model, type, city);
    }

@PostMapping("/racun/new")
    public String createRacun(@ModelAttribute racun racun){
        return racunService.createNewRacun(racun);
    }

服务:

public String getTemplates(Model model){
        racun racunZagreb = new racun();
        racun racunSplit = new racun();
        racun racunRijeka = new racun();

        model.addAttribute("racunZagreb", racunZagreb);
        model.addAttribute("racunSplit", racunSplit);
        model.addAttribute("racunRijeka", racunRijeka);

        return "racuni-template";
    }

public String createRacunForm(Model model, String type, String city){
        racun racun = new racun();
        racun.setType(type);
        racun.setCity(city);

        model.addAttribute("racun", racun);
        return "racun_new";
    }

public String createNewRacun(racun racun){
        racunRepository.save(racun);

        return "redirect:/racun/" + racun.getId();
    }

百里香叶模板:

<div>
  <div class="row row-cols-1 row-cols-md-3 g-4">
    <div class="col">
      <div class="card">
        <div class="card-body">
          <h5 class="card-title">Rijeka</h5>
          <p class="card-text">Ovdje možeš odabrati račune za Rijeku</p>
          <div class="dropdown">
            <button class="dropbtn">Dropdown</button>
            <div class="dropdown-content">
              <a th:href="@{/racun/new(type='Čistoća', city='Rijeka')}">Čistoća</a>
              <a th:href="@{/racun/new(type='Komunalije', city='Rijeka')}">Komunalije</a>
              <a th:href="@{/racun/new(type='Voda', city='Rijeka')}">Voda</a>
              <a th:href="@{/racun/new(type='Internet', city='Rijeka')}">Internet</a>
              <a th:href="@{/racun/new(type='Struja', city='Rijeka')}">Struja</a>
              <a th:href="@{/racun/new(type='Ostalo', city='Rijeka')}">Ostalo</a>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="col">
      <div class="card">
        <div class="card-body">
          <h5 class="card-title">Zagreb</h5>
          <p class="card-text">Ovdje možeš odabrati račune za Zagreb</p>
          <div class="dropdown">
            <button class="dropbtn">Dropdown</button>
            <div class="dropdown-content">
              <a th:href="@{/racun/new(type='Čistoća', city='Zagreb')}">Čistoća</a>
              <a th:href="@{/racun/new(type='Komunalije', city='Zagreb')}">Komunalije</a>
              <a th:href="@{/racun/new(type='Voda', city='Zagreb')}">Voda</a>
              <a th:href="@{/racun/new(type='Internet', city='Zagreb')}">Internet</a>
              <a th:href="@{/racun/new(type='Struja', city='Zagreb')}">Struja</a>
              <a th:href="@{/racun/new(type='Ostalo', city='Zagreb')}">Ostalo</a>
              <a th:href="@{/racun/new(type='Maximus', city='Zagreb')}">Maximus</a>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="col">
      <div class="card">
        <div class="card-body">
          <h5 class="card-title">Split</h5>
          <p class="card-text">Ovdje možeš odabrati račune za Split</p>
          <div class="dropdown">
            <button class="dropbtn">Dropdown</button>
            <div class="dropdown-content">
              <a th:href="@{/racun/new(type='Čistoća', city='Split')}">Čistoća</a>
              <a th:href="@{/racun/new(type='Komunalije', city='Split')}">Komunalije</a>
              <a th:href="@{/racun/new(type='Voda', city='Split')}">Voda</a>
              <a th:href="@{/racun/new(type='Internet', city='Split')}">Internet</a>
              <a th:href="@{/racun/new(type='Struja', city='Split')}">Struja</a>
              <a th:href="@{/racun/new(type='Ostalo', city='Split')}">Ostalo</a>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

一旦我运行此命令并尝试访问任何下拉菜单项,我就会遇到此错误:

出现意外错误(类型=错误请求,状态=400)。 无法将类型“java.lang.String”的值转换为所需类型“java.lang.Long”;对于输入字符串:“new” org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:无法将类型“java.lang.String”的值转换为所需类型“java.lang.Long”;对于输入字符串:“new”

我不知道为什么当我传入 String 并期望一个 String 时,它坚持应该有一个必需的类型“long”。我唯一想到的是 ID,但我没有公开过 ID,所以是的...IDK...请帮忙,我真的很感激。预先感谢

编辑:模板是“racuni-template.html”

java spring-boot thymeleaf
1个回答
0
投票

错误出现在 HTML 中: 我写了 @{/racun/new(type='Čistoća', city='Rijeka')} 但正确的方法是 @{/racun/new/{type}/{city}(type='Čistoća', city= ‘里耶卡’)}

来源:M.Deinum

感谢M.Deinum

© www.soinside.com 2019 - 2024. All rights reserved.