質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Q&A

解決済

1回答

300閲覧

java.lang.ClassCastExceptionを解決したい

ngk10

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

0グッド

0クリップ

投稿2024/04/10 07:52

編集2024/04/10 08:09

実現したいこと

java.lang.ClassCastExceptionを解決したい

発生している問題・エラーメッセージ

hrefで送信したリクエストパラメータをControllerで受け取り、その値を条件にSQLを実行しているのですが、途中で下記のエラーが発生します。
DBはmySQL、DB操作にはmybatisを使用しています。

java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')

因みに、@GetMapping("/order")に入ったときは問題なく表示されるので、
orderForm.setProductList(productService.findProduct(categoryCd));
上記以降の処理に問題があると思われます。

初学者のため、読みづらいコードや、そもそも書き方間違ってるような箇所があったらすみません。
どんなことでもご教示いただけますと幸いです。

該当のソースコード

html

html

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8"> 5<link rel="stylesheet" media="all" th:href="@{/css/style.css}"/> 6<title>商品ページ</title> 7</head> 8<body> 9 10<h3>商品ページ</h3> 11 12 13<article> 14<div class="side"> 15 <div class="row form-horizontal"> 16 <div class="col-sm-12"> 17 <h4 class="clear hidden-sm hidden-xs">商品分類</h4> 18 <div class="bs-component"> 19 <div class="list-group"> 20 <div th:each="productCategoryS : ${orderForm.getCategoryList}"> 21 <a 22 23 th:href="@{/order/product(categoryCd=${productCategoryS.getCategoryCd()})}" 24 class="list-group-item list-group-item-warning" 25 th:text="${productCategoryS.getName()}" 26 th:name="categoryCd"> 27 </a> 28 29 </div> 30 </div> 31 </div> 32 </div> 33 </div> 34</div> 35 36<div class="content"> 37<!-- 一覧 --> 38 39<table> 40 <thead> 41 <tr> 42 <th>製品名</th> 43 <th>数量</th> 44 </tr> 45 </thead> 46 <tbody> 47 <tr th:each="productList : ${orderForm.getProductList}" > 48 <td th:text="productList.getName" /></td> 49 <td th:text="productList.getQuantity" /></td> 50 </tr> 51 </tbody> 52 </table> 53 54</div> 55</article> 56<!-- main-content --> 57</body> 58</html>

entity

java

1 2import lombok.Data; 3 4@Data 5public class product { 6 7 private final String name; 8 private final String categoryName; 9 private final String quantity; 10}

form

java

1 2import java.util.List; 3 4import com.example.jrOrder.entity.category; 5import com.example.jrOrder.entity.product; 6 7import lombok.Data; 8 9@Data 10public class orderForm { 11 private int CategoryCd; 12 private List<category> categoryList; 13 private List<product> productList; 14}

controller

java

1package com.example.jrOrder.controller; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.stereotype.Controller; 5import org.springframework.ui.Model; 6import org.springframework.web.bind.annotation.GetMapping; 7import org.springframework.web.bind.annotation.PostMapping; 8import org.springframework.web.bind.annotation.RequestMapping; 9import org.springframework.web.bind.annotation.RequestParam; 10 11import com.example.jrOrder.form.loginForm; 12import com.example.jrOrder.form.orderForm; 13import com.example.jrOrder.service.*; 14 15 16@Controller 17public class loginController { 18 19 @Autowired 20 private productService productService; 21 22 @GetMapping("/login") 23 public String loginController() { 24 return "login"; 25 } 26 27 @GetMapping(value="/login",params="error") 28 public String error() { 29 return "login"; 30 } 31 32 @GetMapping("/order") 33 public String orderController(orderForm orderForm, Model model) { 34 35 orderForm.setCategoryList(productService.getCategoryList()); 36 model.addAttribute("orderForm", orderForm); 37 38 return "order"; 39 } 40 41 42//この処理を行ったときにエラー 43 @GetMapping("/order/product") 44 public String productController(orderForm orderForm, Model model, @RequestParam(name="categoryCd") int categoryCd){ 45 46 orderForm.setProductList(productService.findProduct(categoryCd)); 47 orderForm.setCategoryList(productService.getCategoryList()); 48 model.addAttribute("orderForm", orderForm); 49 50 return "order"; 51 } 52}

Service

java

1package com.example.jrOrder.service; 2 3import java.util.List; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.context.annotation.Lazy; 7import org.springframework.security.core.userdetails.UsernameNotFoundException; 8import org.springframework.stereotype.Service; 9 10import com.example.jrOrder.entity.category; 11import com.example.jrOrder.entity.product; 12import com.example.jrOrder.repository.productRepository; 13 14@Service 15public class productService { 16 17 @Autowired 18 private productRepository productRepository; 19 20 public List<product> findProduct(int categoryCd){ 21 return productRepository.findProduct(categoryCd); 22 } 23 24 public List<category> getCategoryList(){ 25 return productRepository.getCategoryList(); 26 } 27}

Repository

java

1package com.example.jrOrder.repository; 2 3import java.util.List; 4 5import org.apache.ibatis.annotations.Mapper; 6 7import com.example.jrOrder.entity.category; 8import com.example.jrOrder.entity.product; 9 10@Mapper 11public interface productRepository { 12 13 public List<product> findProduct(int categoryCd); 14 15 public List<category> getCategoryList(); 16 17}

sql

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE mapper PUBLIC 3 "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5<mapper namespace="com.example.jrOrder.repository.productRepository"> 6 7 <select id ="findProduct" parameterType="java.lang.String" resultMap="productDetails"> 8 9 SELECT PRODUCTS.NAME, PRODUCTS.QUANTITY, CATEGORIES.NAME 10 FROM PRODUCTS 11 INNER JOIN CATEGORIES 12 ON PRODUCTS.CATEGORY = CATEGORIES.ID 13 WHERE PRODUCTS.CATEGORY = #{categoryCd} 14 15 16 </select> 17 18 <resultMap type="com.example.jrOrder.entity.product" id="productDetails"> 19 20 <result property="name" column="NAME"/> 21 <result property="category" column="CATEGORIES.NAME"/> 22 <result property="quantity" column="QUANTITY"/> 23 24 </resultMap> 25 26 27 28 <select id ="getCategoryList" resultMap="categoryDetails" > 29 30 SELECT ID, NAME 31 FROM CATEGORIES 32 33 </select> 34 35 <resultMap type="com.example.jrOrder.entity.category" id="categoryDetails"> 36 37 <result property="categoryCd" column="ID"/> 38 <result property="name" column="NAME"/> 39 40 </resultMap> 41 42 43</mapper>

Productテーブル

sql

1CREATE TABLE `products` ( 2 `id` int NOT NULL, 3 `name` varchar(255) NOT NULL, 4 `category` int NOT NULL, 5 `quantity` varchar(45) NOT NULL, 6 PRIMARY KEY (`id`), 7 UNIQUE KEY `id_UNIQUE` (`id`)

Categoryテーブル

sql

1CREATE TABLE `categories` ( 2 `id` int NOT NULL, 3 `name` varchar(255) NOT NULL, 4 PRIMARY KEY (`id`), 5 UNIQUE KEY `id_UNIQUE` (`id`)

試したこと

categoryCdをStringで受けとってからintに変換する処理をはさんで試してみましたが、同様のエラーでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2024/04/10 09:11 編集

>途中で下記のエラーが発生 途中とはご提示のコードのどこでしょうか。 スタックトレースが出ているなら行番号等も出ていると思いますが。 html の 23 行目の url がリクエストになるようですが、 url に categoryCd はちゃんと入っているのでしょうか。 ついでに、 java のクラス名は大文字始まりが推奨です。特に拘り等無ければ採用して頂けるとクラスとオブジェクトの区別が付いて助かります。 https://qiita.com/rkonno/items/1b30daf83854fecbb814
ngk10

2024/04/10 09:06

ご質問ありがとうございます。 at org.apache.ibatis.type.StringTypeHandler.setNonNullParameter(StringTypeHandler.java:26) ~[mybatis-3.5.14.jar:3.5.14] スタックトレースの最上段は上記の通りです。 その下にずっと自作クラスではない行を示す記述が続いており、直近で自作クラスの行が記述されているのがServiceクラスの21行目【return productRepository.findProduct(categoryCd);】になります。
ngk10

2024/04/10 09:12

すみません追記です。 hrefをふんだとき、URLの末尾にproduct?categoryCd=1と入ってきます。 デバッグを行ったとき、Serviceクラスの引数categoryCdに1が入ってきていることも確認できました。
jimbe

2024/04/10 09:26 編集

>org.apache.ibatis.type.StringTypeHandler.setNonNullParameter ということは mybatis で発生しているということですね。 findProduct メソッドは sql の 7~16行目が定義となりますが、 >parameterType="java.lang.String" とパラメータは String になっています。呼び出しの categoryCd は int ではありませんか? Mapper XML ファイル https://mybatis.org/mybatis-3/ja/sqlmap-xml.html
ngk10

2024/04/11 04:21

ご指摘いただいたとおり、Mapper XMLのparameterTypeを削除することでエラーが解消いたしました。 お早いご回答を本当にありがとうございます、とても助かりました;;!!
ngk10

2024/04/11 04:22

連投申し訳ございません。 ベストアンサーに選ばせていただきたいので、同じ内容を回答欄に投稿いただけますでしょうか? お手数をおかけしますがどうぞよろしくお願いいたします!
jimbe

2024/04/11 05:38

お疲れさまでした。 コメントを編集していて追記コメントに気が付いてませんでした。すいません。 どこまでは想定通りに動作しているのか調査されたことも予め質問本文に入れて頂けるとその確認のやりとりが不要になりますので、(teratail に限らず)ご質問の際に留意頂けると良いかと思います。
guest

回答1

0

ベストアンサー

findProduct メソッドは sql の 7~16行目が定義となりますが、

parameterType="java.lang.String"

とパラメータは String になっています。呼び出しの categoryCd は int ではありませんか?

Mapper XML ファイル
https://mybatis.org/mybatis-3/ja/sqlmap-xml.html

投稿2024/04/11 05:31

jimbe

総合スコア12874

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ngk10

2024/04/12 02:59

アドバイスいただき本当にありがとうございました! お世話になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問