お世話になっております
皆様のお知恵を拝借できたら幸いでございます
JAVA(SpringBoot)にてファイルアップロードのシステムを作成しており動作途中で
Listの中身が書き換わってしまう事象です。
前提・実現したいこと
WEB側より複数のファイルアップロードを行い、既に登録がされているファイルを
除いた新規登録分だけを受け付ける仕組みを想定しています
発生している問題・エラーメッセージ
エラーは出ないのですが後述コード内のList変数の中身が後から登録されたデータに書き換わってしまいます
tnpFileNewdata.add(addData);
プログラム実行後のデータ
[fileName=tnpfile_03.pdf, size=700, serial=003]
[fileName=tnpfile_03.pdf, size=700, serial=003]
同じレコードが二つ出来ます
該当のソースコード
Web側から受けるデータは変数tnpListに格納
中身は3ファイル分
ファイル一つ目
kye | value |
---|---|
alradyFlg | 1 |
fileName | tnpfile_01.pdf |
fileSize | 800 |
fileSerialNo | 001 |
ファイル二つ目
kye | value |
---|---|
alradyFlg | 0 |
fileName | tnpfile_02.pdf |
fileSize | 650 |
fileSerialNo | 002 |
ファイル三つ目
kye | value |
---|---|
alradyFlg | 0 |
fileName | tnpfile_03.pdf |
fileSize | 700 |
fileSerialNo | 003 |
二つ目と三つ目が登録される想定です
Bean
1pabulic class tnpFileBean{ 2 /**登録済みフラグ 0=新規登録 1=登録済み.*/ 3 private int alradyFlg; 4 /**ファイル名.*/ 5 private String fileName; 6 /**ファイルサイズ.*/ 7 private String fileSize; 8 /**ファイル管理番号.*/ 9 private String fileSerialNo; 10 11 public int getAlradyFlg(){ 12 return alradyFlg 13 } 14 public String getFileName(){ 15 return fileName 16 } 17 public String getFileSize(){ 18 return fileSize 19 } 20 public String getFileSerialNo(){ 21 return fileSerialNo 22 } 23//setterは略 24}
Service
1 List<Map<String, Object>> tnpFileNewdata = new ArrayList<Map<String, Object>>(); 2 Map<String, Object> addData = new HashMap<String, Object>(); 3 for (tnpFileBean registTnpFile : tnpList) { 4 if (registTnpFile.getAlradyFlg() == 0) { 5 addData.clear(); 6 addData.put("fileName", registTnpFile.getBtrFilePath()); 7 addData.put("size", registTnpFile.getFileSize()); 8 addData.put("serial", registTnpFile.getFileSerialNo()); 9 tnpFileNewdata.add(addData); 10 } 11 }
補足説明
デバッグモードでステップ実行したところ
ループの初回に到達したaddの時点では
tnpFileNewdataの中身は
[fileName=tnpfile_02.pdf, size=650, serial=002]
2回目のループではaddの行に到達する前に
[fileName=tnpfile_03.pdf, size=700, serial=003]
上記に下記変わってました
参照値でもListに渡した後のList内でも変わってしまうものなのでしょうか
期待している値は
[fileName=tnpfile_02.pdf, size=650, serial=002]
[fileName=tnpfile_03.pdf, size=700, serial=003]
になります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/04 02:50