Sekatan Java Spring Boot hanya menerima gabungan bulan-tahun yang unik
P粉676588738
P粉676588738 2023-09-03 10:11:31
0
1
370

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){ Senaraikan monthList = 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 awam bulan(){ 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; }

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.

YearMonthkelas

Java termasuk kelas untuk konsep ini. Ia sesuai dinamakan:YearMonthdan terletak dalam pakejjava.time.

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

Atau gunakanMonthpenghitungan untuk memastikan nilai yang sah.

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

Anda boleh menggunakan地图。使用NavigableMapuntuk 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 lalaiISO 8601: YYYY-MM

Kelas

java.timemenggunakan 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
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!