У меня есть defaultJson.json:
{
"crewType": "Cockpit",
"status": "CREATED",
"usePoints": true,
"points": [
{
"rank": "CPT",
"defaultPoints": 0,
"carryForwardPointsAllowed": false,
"carryForwardPointsMax": null,
"negativePointsAllowed": false,
"negativePointsLimit": null,
"accrualExpirationValue": null,
"accrualExpirationUnit": null
}
]
}
Я создал модель для этого json, чтобы иметь возможность создавать из него объект:
package com.xxxx.models
import lombok.AllArgsConstructor
import lombok.Builder
import lombok.Data
import lombok.NoArgsConstructor
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
class SomeConfig {
private Long version
private CrewType crewType
private ConfigStatus status
private String modifiedBy
private String modifiedTimestamp
private List<String> leaveTypes
private boolean usePoints
private List<PointsConfig> points
}
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
class PointsConfig {
private String rank
private int defaultPoints
private boolean carryForwardPointsAllowed
private Integer carryForwardPointsMax
private boolean negativePointsAllowed
private Integer negativePointsLimit
private Integer accuralValue
private AccrualUnit accuralUnit
}
enum ConfigStatus {
DRAFT,
CREATED
}
enum AccrualUnit {
DAY,
MONTH
}
enum CrewType {
CABIN("Cabin"),
COCKPIT("Cockpit"),
final String value
CrewType(String value) {
this.value = value
}
}
Итак, я хочу создатьобъект модели SomeConfig и возможность изменять объекты внутри этого объекта.Проблема в том, что он не работает.
Когда я пытаюсь создать этот объект следующим образом:
SomeConfig someConfig = new SomeConfig(DataSource.getTestData(defaultJson.json)
Я получаю это сообщение об ошибке:
java.lang.IllegalArgumentException: No enum constant
com.xxxx.models.CrewType.Cockpit
at java.lang.Enum.valueOf(Enum.java:238)
at com.xxxx....
Это сработало бы, если бы я нарушил соглашение об именах и сделал бы перечисление следующим образом:
enum CrewType {
Cabin,
Cockpit
}
Но мы используем перечисления с заглавными буквами, и это хорошее соглашение об именах.
Как я могу подойти к этой проблеме, чтобы иметь возможность получать crewType как String из этого defaultJson и каким-то образом преобразовывать его в CrewType.COCKPIT, если эта строка "Cockpit", и в CrewType.CABIN, если эта строка "Cabin"