@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"
}