Einschränkung: Java Spring Boot akzeptiert nur eindeutige Monats-Jahres-Kombinationen
<p>So erlauben Sie die Eingabe nur von Monats-Jahres-Kombinationen in Java Spring Boot. Ich muss sicherstellen, dass der Benutzer (Postman-Client) für jeden Monat des aktuellen Jahres einen Datensatz (zufällig generierter Wert) eingeben kann. Zum Beispiel: Monat: Februar -> Jahr: 2020 -> genericValue = <em>random</em> Wenn der Benutzer erneut Februar 2020 eingibt, wird eine Ausnahme ausgelöst. Ich habe versucht, das Jahr und den Monat in separaten Listen zu speichern, um zu überprüfen, ob der Monat dieses Jahres bereits in der Datenbank vorhanden ist, aber ohne Erfolg. Zuerst im RecordService, wenn ich sehen möchte, ob vom Benutzer kein aktuelles Jahr eingegeben wurde. Wenn es beispielsweise kein Jahr 2021 gibt, sollte das „Wenn“ dieses Jahr zur Liste hinzufügen, damit ich die Monat-Jahr-Kombination überprüfen kann. Es funktioniert, aber nicht das, was ich brauche, weil das zweite if immer eine RuntimeException() auslöst, es sei denn, ich gebe ein Jahr ein, das noch nicht eingegeben wurde (z. B. gibt es 2020, 2021 und 2022, aber nicht 2023), also wenn der Benutzer Beim Hinzufügen: </p>
<pre class="brush:php;toolbar:false;">{
"Monat": "März",
„Jahr“: „2023“,
"readingTime": "1"
}</pre>
<p>Der Code funktioniert, da in der Liste kein Jahr 2023 enthalten ist, aber sobald versucht wird, </p>
<pre class="brush:php;toolbar:false;">{
"Monat": "Mai",
„Jahr“: „2023“,
"readingTime": "1"
}</pre>
<p>Es wird nicht funktionieren, weil das Jahr bereits existiert, obwohl es funktionieren sollte, weil es in der Datenbank keine Kombination für Mai 2023 gibt. Ich habe versucht, mit einem booleschen Wert zu prüfen, ob die Kombination existiert, aber das ergibt für mich keinen Sinn. Also bitte um Hilfe :)
Hier ist mein Code.</p>
<p>RecordController.java</p>
<pre class="brush:php;toolbar:false;">@PostMapping("/{client_id}")
public Record add(@PathVariable Long client_id, @RequestBody Record record){
return recordService.add(client_id, record);
}</pre>
<p>RecordService.java</p>
<pre class="brush:php;toolbar:false;">public Record add(Long client_id, Record record){
Liste<String> Monatsliste = Monate();
Liste<Integer> yearList = years();
Record recordSave = new Record();
recordSave.setId(client_id);
recordSave.setYear(record.getYear());
recordSave.setMonth(record.getMonth());
recordSave.setReadingTime(record.getReadingTime());
recordSave.setReadingValue(randomGenerate());
//Funktioniert nicht
if (!yearList.contains(recordSave.getYear())){
yearList.add(recordSave.getYear());
}
//Funktioniert nicht
if (monthList.contains(recordSave.getMonth()) && yearList.contains(recordSave.getYear())){
throw new RuntimeException();
}
anders {
recordRepository.save(recordSave);
}
null zurückgeben;
}</pre>
<p>记录.java</p>
<pre class="brush:php;toolbar:false;">@Data
@Juristische Person
@Table(name = "Datensatz")
@JsonIgnoreProperties({"hibernateLazyInitializer","handler","device"})
öffentliche Klasse Record implementiert Serializable {
@Ausweis
@GeneratedValue(strategy= GenerationType.IDENTITY)
private lange ID;
String-Monat;
Ganzzahliges Jahr;
String readingTime;
Float readingValue;
boolean isPresent;
}</pre>
<p>RandomGenerateValue 和月年函数</p>
<pre class="brush:php;toolbar:false;">public Float randomGenerate(){
int max = 105, min = 14;
float random_float = (float)Math.floor(Math.random()*(max-min+1)+min);
return random_float;
}
öffentliche Liste<String> Monate(){
Liste<String> MonthList = new ArrayList<>();
MonthList.add("Januar"); MonthList.add("Februar"); MonthList.add("März"); MonthList.add("April");
MonthList.add("Mai"); MonthList.add("Juni"); MonthList.add("Juli"); MonthList.add("August");
MonthList.add("September"); MonthList.add("Oktober"); MonthList.add("November"); MonthList.add("Dezember");
return Monatsliste;
}öffentliche Liste<Integer> Jahre(){
Liste<Integer> yearList = new ArrayList<>();
yearList.add(2020);
yearList.add(2021);
return yearList;
}</pre></p>