前提・実現したいこと
ローカル環境でWEBアプリケーションを作成しており、ユーザーのプロフィール画像を設定できるようにしようと思っています。
その際DBに画像データをバイナリとして登録しておき、そちらを取得しようと考えました。
エラーメッセージ全文
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='isImage', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.postgresql.util.PSQLException: ラージオブジェクトは、自動コミットモードで使うことができません。] with root cause
該当のソースコード(抜粋)
html
1<form method="post" enctype="multipart/form-data" th:action="@{/profile}" th:object="${profileForm}"> 2 <input th:field="*{image}" type="file" multiple/> 3 <input type="submit" value="送信"/> 4</form>
controller
1@PostMapping 2 public ModelAndView profileEditPost(ProfileForm profileForm, ModelAndView mav) { 3 try { 4 InputStream isImage = profileForm.getImage().getInputStream(); 5 profileMapper.updateImage(isImage); 6 } catch (IOException e) { 7 e.printStackTrace(); 8 } 9 return mav; 10 }
Mapper
1<insert id="updateImage"> 2 insert into images ( 3 image 4 ) 5 values ( 6 #{isImage} 7 ) 8</insert>
試したこと
InputStreamではなく、byte[]のままMapperにパラメータを渡そうとしましたが、
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed;
nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException:
Parameter 'isImage' not found. Available parameters are [array]] with root cause
のエラーが出てしまいます。
ちなみにformはnullではありません。
またDBの型もoid、byteaともに試しましたが駄目でした。
MyBatisのHandlerの実装やこちらを参考にしてみましたが、
org.apache.commons.io.IOUtilsがインポートできませんでした。
下記の環境で画像ファイルをDBに登録する方法についてご助力お願いいたします。
バイナリにこだわっているわけではありませんが、staticに保存とかは考えていません。
補足情報(FW/ツールのバージョンなど)
SpringBoot、MyBatis、PostgreSQL