제한 사항 Java Spring Boot는 고유한 월-연도 조합만 허용합니다.
P粉676588738
P粉676588738 2023-09-03 10:11:31
0
1
360

Java Spring Boot에서 월-연도 조합만 입력하도록 허용하는 방법입니다. 사용자(Postman 클라이언트)가 올해의 각 달에 대한 레코드(임의로 생성된 값)를 입력할 수 있는지 확인해야 합니다. 예: 월: 2월 -> 연도: 2020 -> 생성된 값 = random 사용자가 2020년 2월을 다시 입력하면 예외가 발생합니다. 해당 연도의 달이 데이터베이스에 이미 존재하는지 확인하기 위해 연도와 월을 별도의 목록에 저장하려고 시도했지만 아무 소용이 없습니다. 먼저 RecordService에서 사용자가 입력한 현재 연도가 없는지 확인합니다. 예를 들어, 2021년이 없으면 "if"는 월-연도 조합을 확인할 수 있도록 해당 연도를 목록에 추가해야 합니다. 작동하지만 아직 입력되지 않은 연도를 입력하지 않는 한(예: 2020, 2021, 2022는 있지만 2023은 없음) 두 번째 if는 항상 RuntimeException()을 발생시키기 때문에 필요한 것은 아닙니다. 추가할 때:

{ "월": "3월", "연도": "2023", "readingTime": "1" }

목록에 2023년이 없기 때문에 코드가 작동하지만, 2023년을 입력하려고 하면

{ "월": "5월", "연도": "2023", "readingTime": "1" }

데이터베이스에 2023년 5월에 대한 조합이 없기 때문에 작동해야 하지만 연도가 이미 존재하기 때문에 작동하지 않습니다. 조합이 존재하는지 확인하기 위해 부울을 사용해 보았지만 나에게는 아무런 의미가 없습니다. 그러니 도와주세요 :) 여기 내 코드가 있습니다.

RecordController.java

@PostMapping("/{client_id}") 공개 레코드 추가(@PathVariable Long client_id, @RequestBody 레코드 레코드){ return RecordService.add(client_id, 레코드); }

RecordService.java

공개 레코드 추가(Long client_id, 레코드 레코드){ 목록
      
       월목록 = 개월(); 목록<정수> yearList = 년(); 레코드 RecordSave = 새 레코드(); 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())){ 새로운 RuntimeException()을 던져라; } 또 다른 { RecordRepository.save(recordSave); } null을 반환; }

记录.java

@Data @실재 @Table(name = "레코드") @JsonIgnoreProperties({"hibernateLazyInitializer","handler","device"}) 공개 클래스 레코드는 직렬화 가능 {을 구현합니다. @ID @GeneratedValue(전략= GenerationType.IDENTITY) 개인 긴 ID; 문자열 월; 정수 연도; 문자열읽기시간; 부동 판독 값; 부울 isPresent; }

RandomGenerateValue 日月年函数

공용 부동 소수점 생성(){ 정수 최대 = 105, 최소 = 14; float random_float = (float)Math.floor(Math.random()*(max-min+1)+min); random_float를 반환합니다. } 공개 목록 개월(){ 목록
       
        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월"); 개월 목록을 반환합니다. }공개 목록 연령(){ 목록<정수> yearList = new ArrayList<>(); yearList.add(2020); yearList.add(2021); 연도목록을 반환합니다. }

P粉676588738
P粉676588738

모든 응답 (1)
P粉285587590

연도와 월을 단일 값으로 함께 유지

귀하의 문제는 연도와 월을 별도의 값으로 처리하는 데서 발생한 것 같습니다. 대신, 그것들을 결합하십시오. 몇 년과 몇 달을 기준으로 생각해 보세요.

YearMonth수업

Java에는 이 개념에 대한 클래스가 포함되어 있습니다. 적절한 이름은YearMonth이며java.time패키지에 있습니다.

으아악

또는Month열거를 사용하여 유효한 값을 확인하세요.

으아악

地图。使用NavigableMap를 사용하여 키를 정렬된 순서로 유지할 수 있습니다.

으아악

값이 입력되었는지 테스트합니다.

으아악

ISO 8601

텍스트 목적의 경우 기본ISO 8601형식인 YYYY-MM

을 사용하세요.

java.time클래스는 텍스트를 구문 분석/생성할 때 기본적으로 ISO 8601 형식을 사용합니다.

으아악

데이터베이스가 연도 및 월 데이터 유형을 제공하지 않는다고 가정하면 이러한 문자열을 사용하여 데이터베이스에 저장할 수 있습니다. 이 데이터 유형을 제공하는 데이터베이스를 모릅니다. 그러니 말로는 충분합니다.

알파벳순으로 정렬하면 값도 시간순으로 정렬되니 주의하세요.

JSON은 다음과 같습니다:

으아악
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!