我在 Quarkus 应用程序中使用以下记录,有时我需要访问位于语句嵌套记录中的 requestId 字段。我想避免使用嵌套记录提供的 getter,因为这会违反 Demeter 定律。我尝试在 KYAAutoResponse 记录中添加第五个名为 Statements 的字段,然后使用自定义方法自动获取 requestId 的访问权限,但这会返回 null。
我对如何绕过违规行为感到有点困惑。你能帮我吗?
public record KYAAutoResponse(
DataTransFlowAccessOutputRecord dataTransFlowAccessOutputRecord,
long callSequenceId,
String callSequenceDate
) {
public record DataTransFlowAccessOutputRecord(
Data data
) {
public record Data(
Document document
) {
public record Document(
Statements statements
) {
@JsonInclude(JsonInclude.Include.NON_NULL)
public record Statements(
@JsonProperty("request-id") String requestId,
@JsonProperty("consent_content") String data
) {}
}
}
}
}
如果我理解正确的话,你希望能够做到
kyaAutoResponse.requestId()
。
这将允许您执行此操作:
public record KYAAutoResponse(
DataTransFlowAccessOutputRecord dataTransFlowAccessOutputRecord,
long callSequenceId,
String callSequenceDate
) {
public record DataTransFlowAccessOutputRecord(
Data data
) {
public record Data(
Document document
) {
public record Document(
Statements statements
) {
@JsonInclude(JsonInclude.Include.NON_NULL)
public record Statements(
@JsonProperty("request-id") String requestId,
@JsonProperty("consent_content") String data
) {}
}
}
}
@JsonIgnore
public Optional<String> requestId() {
if (dataTransFlowAccessOutputRecord == null) return Optional.empty();
if (dataTransFlowAccessOutputRecord.data == null) return Optional.empty();
if (dataTransFlowAccessOutputRecord.data.document == null) return Optional.empty();
if (dataTransFlowAccessOutputRecord.data.document.statements == null) return Optional.empty();
return Optional.ofNullable(dataTransFlowAccessOutputRecord.data.document.statements.requestId);
}
}