@PostMapping("/{client_id}") 公共記錄新增(@PathVariable Long client_id,@RequestBody記錄記錄){ return recordService.add(client_id, record); }</pre> <p>RecordService.java</p>公共記錄新增(長client_id,記錄記錄){ 列表<字串>月份列表=月份(); 列表<整數>年列表=年(); 記錄recordSave = new Record(); recordSave.setId(client_id); recordSave.setYear(record.getYear()); recordSave.setMonth(record.getMonth()); recordSave.setReadingTime(record.getReadingTime()); recordSave.setReadingValue(randomGenerate()); //不起作用 if (!yearList.contains(recordSave.getYear())){ yearList.add(recordSave.getYear()); } //不起作用 if (monthList.contains(recordSave.getMonth()) &&yearList.contains(recordSave.getYear())){ 拋出新的運行時異常(); } 別的 { recordRepository.save(recordSave); } 返回空值; }</pre> <p>記錄.java</p>@Data @實體 @Table(名稱=“記錄”) @JsonIgnoreProperties({"hibernateLazyInitializer","處理程序","設備"}) 公共類別記錄實現可序列化{ @ID @GenerateValue(策略= GenerationType.IDENTITY) 私人長ID; 字符串月; 整數年份; 字串讀取時間; 浮點數讀數值; 布林值是否存在; }</pre> <p>RandomGenerateValue 與月年函數</p>public Float randomGenerate(){ 整數最大值 = 105,最小值 = 14; float random_float = (float)Math.floor(Math.random()*(max-min 1) min); 傳回隨機浮點數; } 公共列表月(){ 列表<字串> MonthList = new ArrayList<>(); MonthList.add(“一月”); MonthList.add(“二月”); MonthList.add(“三月”); MonthList.add(“四月”); MonthList.add(“五月”); MonthList.add(“六月”); MonthList.add(“七月”); MonthList.add(“八月”); MonthList.add(“九月”); MonthList.add(“十月”); MonthList.add(“十一月”); MonthList.add(“十二月”); 返回月份列表; } 公共列表<整數>年(){ 列表<整數> YearList = new ArrayList<>(); 年列表.add(2020); 年列表.add(2021); 返回年份列表; }</pre></p>
P粉2855875902023-09-04 00:07:58
您的問題似乎源於將年份和月份視為單獨的值。相反,將它們結合起來。以年月為單位進行思考。
YearMonth
類別Java 包含一個用於此概念的類別。它的名稱很適合:YearMonth
,位於java.time套件中。
YearMonth ym = YearMonth.of ( 2023 , 3 ) ;
或使用Month
枚舉來確保有效值。
YearMonth ym = YearMonth.of ( 2023 , Month.MARCH ) ;
您可以使用 地圖
。使用 NavigableMap
使鍵保持排序順序。
NavigableMap< YearMonth , UUID > map = new TreeMap<>() ; map.put( YearMonth.of ( 2023 , Month.MARCH ) , UUID.randomUUID() ); map.put( YearMonth.of ( 2023 , Month.FEBRUARY ) , UUID.randomUUID() );
測試是否已輸入值。
boolean alreadyPut2023March = map.containsKey( YearMonth.of ( 2023 , Month.MARCH ) ) ;
出於文字目的,請使用預設的 ISO 8601 格式:YYYY-MM
java.time 類別在解析/產生文字時預設使用 ISO 8601 格式。
String iso8601Output = YearMonth.of ( 2023 , Month.MARCH ).toString() ;
假設您的資料庫不提供年月資料類型,這樣的字串可用於儲存在您的資料庫中。我不知道有哪個資料庫提供這種資料類型。所以文字就夠了。
請注意,當按字母順序排序時,值也會按時間順序排序。
你的 JSON 看起來像這樣:
{
"year-month": "2023-03",
"readingTime": "1"
}