Sekatan Java Spring Boot hanya menerima gabungan bulan-tahun yang unik
P粉676588738
P粉676588738 2023-09-03 10:11:31
0
1
506
<p>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 = <em>random</em>. 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: </p> <pre class="brush:php;toolbar:false;">{ "bulan": "Mac", "tahun": "2023", "Masa membaca": "1" }</pre> <p>Kod akan berfungsi kerana tiada tahun 2023 dalam senarai, tetapi sebaik sahaja mereka cuba memasukkan</p> <pre class="brush:php;toolbar:false;">{ "bulan": "Mei", "tahun": "2023", "Masa membaca": "1" }</pre> <p>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.</p> <p>RecordController.java</p> <pre class="brush:php;toolbar:false;">@PostMapping("/{client_id}") tambah Rekod awam(@PathVariable Long client_id, @RequestBody Record record){ return recordService.add(client_id, record); }</pre> <p>RecordService.java</p> <pre class="brush:php;toolbar:false;">tambah Rekod awam(ID_pelanggan panjang, Rekod rekod){ Senaraikan<String> monthList = bulan(); Senaraikan<Integer> 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; }</pre> <p>记录.java</p> <pre class="brush:php;toolbar:false;">@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; }</pre> <p>RandomGenerateValue 和月年函数</p> <pre class="brush:php;toolbar:false;">public Float randomGenerate(){ int maks = 105, min = 14; float random_float = (float)Math.floor(Math.random()*(maks-min+1)+min); kembali random_float; } Senarai awam<String> bulan(){ Senaraikan<String> 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<Integer> tahun(){ Senaraikan<Integer> yearList = ArrayList baharu<>(); yearList.add(2020); yearList.add(2021); senarai tahun pulangan; }</pre></p>
P粉676588738
P粉676588738

membalas semua(1)
P粉285587590

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 kelas

Java termasuk kelas untuk konsep ini. Ia sesuai dinamakan: YearMonth dan terletak dalam pakej java.time.

YearMonth ym = YearMonth.of ( 2023 , 3 ) ;

Atau gunakan Monthpenghitungan untuk memastikan nilai yang sah.

YearMonth ym = YearMonth.of ( 2023 , Month.MARCH ) ;

Anda boleh menggunakan 地图。使用 NavigableMap untuk memastikan kunci dalam susunan yang disusun.

NavigableMap< YearMonth , UUID > map = new TreeMap<>() ;
map.put( 
    YearMonth.of ( 2023 , Month.MARCH ) , 
    UUID.randomUUID()
);
map.put( 
    YearMonth.of ( 2023 , Month.FEBRUARY ) , 
    UUID.randomUUID()
);

Uji sama ada nilai telah dimasukkan.

boolean alreadyPut2023March = map.containsKey( YearMonth.of ( 2023 , Month.MARCH ) ) ;

ISO 8601

Untuk tujuan teks, gunakan format lalai ISO 8601: YYYY-MM

Kelas

java.time menggunakan format ISO 8601 secara lalai apabila menghuraikan/menjana teks.

String iso8601Output = YearMonth.of ( 2023 , Month.MARCH ).toString() ;

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:

{
    "year-month": "2023-03",
    "readingTime": "1"
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan