制限 Java Spring Boot は、一意の月と年の組み合わせのみを受け入れます
<p>Java Spring Boot で月と年の組み合わせのみの入力を許可する方法。ユーザー (Postman クライアント) が今年の各月のレコード (ランダムに生成された値) を入力できることを確認する必要があります。例: 月: 2 月 -> 年: 2020 -> generatedValue = <em>random</em>。ユーザーが再び 2020 年 2 月に入ると、例外がスローされます。年と月を別々のリストに保存して、その年の月がデータベースにすでに存在するかどうかを確認しようとしましたが、役に立ちませんでした。まず、ユーザーが入力した現在の年がないかどうかを確認する場合は、RecordService 内で行います。たとえば、2021 年がない場合、月と年の組み合わせを確認できるように、「if」でその年をリストに追加する必要があります。それは機能しますが、まだ入力されていない年を入力しない限り(たとえば、2020、2021、2022はありますが、2023はありません)、2番目のifは常にRuntimeException()をスローするため、必要なものではありません。追加する場合: </p>
<pre class="brush:php;toolbar:false;">{
「月」: 「3 月」、
「年」: 「2023」、
"読書時間": "1"
}</pre>
<p>リストには 2023 年がないため、コードは機能しますが、入力しようとするとすぐに </p>
<pre class="brush:php;toolbar:false;">{
「月」: 「5月」、
「年」: 「2023」、
"読書時間": "1"
}</pre>
<p>データベースに 2023 年 5 月の組み合わせがないため機能するはずですが、年がすでに存在しているため機能しません。ブール値を使用して組み合わせが存在するかどうかを確認しようとしましたが、それは私にとって意味がありません。だから助けてください:)
これが私のコードです。</p>
<p>RecordController.java</p>
<pre class="brush:php;toolbar:false;">@PostMapping("/{client_id}")
public Record add(@PathVariable Long client_id, @RequestBody Record レコード){
return recordService.add(client_id, レコード);
}</pre>
<p>RecordService.java</p>
<pre class="brush:php;toolbar:false;">public Record add(Long client_id, Record Record){
リスト<文字列> monthList = months();
リスト<整数> yearList = 年();
レコード RecordSave = 新しい Record();
RecordSave.setId(client_id);
RecordSave.set Year(record.get Year());
RecordSave.setMonth(record.getMonth());
RecordSave.setReadingTime(record.getReadingTime());
RecordSave.setReadingValue(randomGenerate());
//動作しません
if (!yearList.contains(recordSave.get Year())){
yearList.add(recordSave.get Year());
}
//動作しません
if (monthList.contains(recordSave.getMonth()) && yearList.contains(recordSave.get Year())){
新しい RuntimeException() をスローします。
}
それ以外 {
RecordRepository.save(recordSave);
}
null を返します。
}</pre>
<p>记录.java</p>
<pre class="brush:php;toolbar:false;">@Data
@実在物
@Table(名前 = "レコード")
@JsonIgnoreProperties({"hibernateLazyInitializer","ハンドラー","デバイス"})
public class Record は Serializable {を実装します
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
プライベートロングID;
文字列の月。
整数の年。
文字列読み取り時間;
浮動小数点読み取り値;
ブール値は存在します。
}</pre>
<p>RandomGenerateValue 和月年関数数</p>
<pre class="brush:php;toolbar:false;">public Float randomGenerate(){
int 最大 = 105、最小 = 14;
float random_float = (float)Math.floor(Math.random()*(max-min 1) min);
ランダムフロートを返します;
}
パブリック リスト月(){
リスト<文字列> monthList = 新しい ArrayList<>();
monthList.add("1 月"); monthList.add("2 月"); monthList.add("3 月"); monthList.add("4 月");
monthList.add("5月"); monthList.add("6 月"); monthList.add("7 月"); monthList.add("8 月");
monthList.add("9 月"); monthList.add("10 月"); monthList.add("11 月"); monthList.add("12 月");
monthList を返します。
}
public List<整数>年(){
リスト<整数> yearList = 新しい ArrayList<>();
yearList.add(2020);
yearList.add(2021);
yearList を返します。
}</pre></p>