Bagaimana untuk membenarkan kemasukan hanya gabungan bulan tahun dalam Java Spring Boot. Saya perlu memastikan bahawa pengguna (pelanggan Posmen) boleh memasukkan rekod (nilai yang dijana secara rawak) untuk setiap bulan dalam tahun semasa. Contohnya: bulan: Februari -> tahun: 2020 -> generatedValue = random. Apabila pengguna memasuki Februari 2020 sekali lagi, ia memberikan pengecualian. Saya telah cuba menyimpan tahun dan bulan dalam senarai berasingan untuk menyemak sama ada bulan tahun itu sudah wujud dalam pangkalan data, tetapi tidak berjaya. Pertama dalam RecordService jika saya ingin melihat jika tiada tahun semasa yang dimasukkan oleh pengguna. Contohnya, jika tiada tahun 2021, maka "jika" harus menambah tahun itu pada senarai supaya saya boleh menyemak gabungan bulan-tahun. Ia berfungsi, tetapi bukan yang saya perlukan kerana yang kedua jika sentiasa melemparkan RuntimeException() melainkan saya memasuki tahun yang belum dimasukkan lagi (mis. terdapat 2020, 2021 dan 2022, tetapi bukan 2023), jadi apabila pengguna Apabila menambah:
{ "bulan": "Mac", "tahun": "2023", "Masa membaca": "1" }
Kod akan berfungsi kerana tiada tahun 2023 dalam senarai, tetapi sebaik sahaja mereka cuba memasukkan
{ "bulan": "Mei", "tahun": "2023", "Masa membaca": "1" }
Ia tidak akan berfungsi kerana tahun itu sudah wujud, walaupun ia sepatutnya berfungsi kerana tiada gabungan untuk Mei 2023 dalam pangkalan data. Saya cuba menggunakan boolean untuk menyemak sama ada gabungan itu wujud tetapi itu tidak masuk akal kepada saya. Jadi tolong bantu :) Inilah kod saya.
RecordController.java
@PostMapping("/{client_id}") tambah Rekod awam(@PathVariable Long client_id, @RequestBody Record record){ return recordService.add(client_id, record); }
RecordService.java
tambah Rekod awam(ID_pelanggan panjang, Rekod rekod){ SenaraikanmonthList = bulan(); Senaraikan yearList = tahun(); Rekod rekodSimpan = Rekod baharu(); recordSave.setId(client_id); recordSave.setYear(record.getYear()); recordSave.setMonth(record.getMonth()); recordSave.setReadingTime(record.getReadingTime()); recordSave.setReadingValue(randomGenerate()); //Tidak berfungsi jika (!yearList.contains(recordSave.getYear())){ yearList.add(recordSave.getYear()); } //Tidak berfungsi if (monthList.contains(recordSave.getMonth()) && yearList.contains(recordSave.getYear())){ buang RuntimeException(); } lain { recordRepository.save(recordSave); } kembali null; }
记录.java
@Data @Entiti @Jadual(nama = "rekod") @JsonIgnoreProperties({"hibernateLazyInitializer","pengendali","peranti"}) Rekod kelas awam melaksanakan Serializable { @ID @GeneratedValue(strategi= GenerationType.IDENTITY) id panjang peribadi; Bulan rentetan; tahun integer; Masa membaca rentetan; Nilai bacaan terapung; boolean isPresent; }
RandomGenerateValue 和月年函数
public Float randomGenerate(){ int maks = 105, min = 14; float random_float = (float)Math.floor(Math.random()*(maks-min+1)+min); kembali random_float; } Senarai awambulan(){ Senaraikan monthList = ArrayList baharu<>(); monthList.add("Januari"); monthList.add("Februari"); monthList.add("Mac"); monthList.add("April"); monthList.add("Mei"); monthList.add("Jun"); monthList.add("Julai"); monthList.add("Ogos"); monthList.add("September"); monthList.add("Oktober"); monthList.add("November"); monthList.add("Disember"); Senarai bulan pulangan; }Senarai awam tahun(){ Senaraikan yearList = ArrayList baharu<>(); yearList.add(2020); yearList.add(2021); senarai tahun pulangan; }
Pastikan tahun dan bulan bersama-sama sebagai satu nilai
Masalah anda nampaknya berpunca daripada menganggap tahun dan bulan sebagai nilai yang berasingan. Sebaliknya, gabungkan mereka. Fikirkan dari segi tahun dan bulan.
YearMonth
kelasJava termasuk kelas untuk konsep ini. Ia sesuai dinamakan:
YearMonth
dan terletak dalam pakejjava.time.Atau gunakan
Month
penghitungan untuk memastikan nilai yang sah.Anda boleh menggunakan
地图
。使用NavigableMap
untuk memastikan kunci dalam susunan yang disusun.Uji sama ada nilai telah dimasukkan.
ISO 8601
Untuk tujuan teks, gunakan format lalaiISO 8601: YYYY-MM
Kelasjava.timemenggunakan format ISO 8601 secara lalai apabila menghuraikan/menjana teks.
Dengan mengandaikan pangkalan data anda tidak menyediakan jenis data tahun dan bulan, rentetan sedemikian boleh digunakan untuk menyimpan dalam pangkalan data anda. Saya tidak tahu mana-mana pangkalan data yang menyediakan jenis data ini. Jadi cukuplah kata-kata.
Sila ambil perhatian bahawa apabila mengisih mengikut abjad, nilai juga akan diisih mengikut kronologi.
JSON anda akan kelihatan seperti ini: