49.6. 3. DataField
DataField 주석은 필드의 속성을 정의합니다. 각 데이터 필드는 레코드의 위치, 유형(문자열, int, date, …) 및 패턴(선택사항)으로 식별됩니다.
주석 이름 | 레코드 유형 | level |
---|---|---|
DataField | all | 속성 |
매개변수 이름 | type | 정보 |
---|---|---|
POS | int | 필수 - 필드의 입력 위치입니다. 1에서 …까지의 숫자 번호 - 위치 매개변수를 참조하십시오. |
패턴 | string | 선택 사항 - 기본값 = "" - Decimal, Date 형식을 지정하는 데 사용됩니다. |
길이 | int | 선택 사항 - 고정 길이 형식의 필드 길이를 나타냅니다. |
Precision | int | 선택 사항 - Decimal 수가 포맷/parsed될 때 사용할 정확도를 나타냅니다. |
패턴 | string | 선택 사항 - default value = "" - Java 포맷터(예: SimpleDateFormat)에서 데이터를 포맷/검증하는 데 사용됩니다. 패턴을 사용하는 경우 bindy 데이터 형식으로 locale을 설정하는 것이 좋습니다. "us"와 같은 알려진 로케일로 설정하거나 "default"를 사용하여 플랫폼 기본 로케일을 사용합니다. "기본"에는 Camel 2.14/2.13.3/2.12.5가 필요합니다. |
position | int | 선택 사항 - CSV 생성된 CSV의 필드 위치(출력 메시지)가 입력 위치(pos)와 다른 경우 사용해야 합니다. pos 매개변수를 참조하십시오. |
필수 항목 | boolean | 선택 사항 - 기본값 = "false" |
Trim | boolean | 선택 사항 - 기본값 = "false" |
defaultValue | string | Camel 2.10: 선택 사항 - 기본값 = "" - 해당 CSV 필드가 비어 있거나 사용할 수 없는 경우 필드의 기본값을 정의합니다. |
impliedDecimalSeparator | boolean | Camel 2.11: 선택 사항 - 기본값 = "false" - 지정된 위치에 임박한 소수점이 있는지 나타냅니다. |
lengthPos | int | Camel 2.11: 선택 사항 - 이 필드에 대한 고정 길이를 정의하는 고정 길이 레코드에서 데이터 필드를 식별하는 데 사용할 수 있습니다. |
조정 | string | 선택 사항 - default value = "R" - 텍스트를 고정 길이 필드 내에 오른쪽 또는 왼쪽에 정렬합니다. 'R' 또는 'L' 값 사용 |
구분 기호 | string | Camel 2.11: 선택 사항 - 고정 길이 레코드 내에서 변수 길이 필드의 끝을 장식하는 데 사용할 수 있습니다. |
사례 1 : pos
이 매개변수/attribute는 CSV 레코드에서 필드의 위치를 나타냅니다.
위치
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 5) private String isinCode; }
이 예에서 볼 수 있듯이 위치는 1에서 시작되지만 클래스 순서에서 '5'에서 계속됩니다. '2'에서 '4' 사이의 숫자는 클래스 Client에 정의되어 있습니다(다음 참조).
위치가 다른 모델 클래스에서 계속됩니다.
public class Client { @DataField(pos = 2) private String clientNr; @DataField(pos = 3) private String firstName; @DataField(pos = 4) private String lastName; }
케이스 2 : 패턴
패턴을 사용하면 데이터 형식을 강화하거나 검증할 수 있습니다.
패턴
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 5) private String isinCode; @DataField(name = "Name", pos = 6) private String instrumentName; @DataField(pos = 7, precision = 2) private BigDecimal amount; @DataField(pos = 8) private String currency; // pattern used during parsing or when the date is created @DataField(pos = 9, pattern = "dd-MM-yyyy") private Date orderDate; }
케이스 3 : 정확성
전체밀도는 숫자의 10진수 부분을 정의하려는 경우 유용합니다.
Precision
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @Link private Client client; @DataField(pos = 5) private String isinCode; @DataField(name = "Name", pos = 6) private String instrumentName; @DataField(pos = 7, precision = 2) private BigDecimal amount; @DataField(pos = 8) private String currency; @DataField(pos = 9, pattern = "dd-MM-yyyy") private Date orderDate; }
case 4 : 출력이 다릅니다.
position 속성은 생성된 CSV 레코드에 필드를 배치하는 방법을 bindy에게 알립니다. 기본적으로 사용되는 위치는 'pos' 속성으로 정의된 위치에 해당합니다. 위치가 다른 경우 (즉, "position"를 사용하여 이를 나타낼 수 있는 것보다 마샬링과 마샬링을 비교하는 asymetric processus가 있음을 의미합니다.
예를 들면 다음과 같습니다.
출력의 위치가 다릅니다.
@CsvRecord(separator = ",", isOrdered = true) public class Order { // Positions of the fields start from 1 and not from 0 @DataField(pos = 1, position = 11) private int orderNr; @DataField(pos = 2, position = 10) private String clientNr; @DataField(pos = 3, position = 9) private String firstName; @DataField(pos = 4, position = 8) private String lastName; @DataField(pos = 5, position = 7) private String instrumentCode; @DataField(pos = 6, position = 6) private String instrumentNumber; }
주석 @DataField의 이 속성은 주석 @CsvRecord의 isOrdered = true와 함께 사용해야 합니다.
케이스 5 : 필수
필드가 필수인 경우 '필수' 속성을 true로 설정하면 됩니다.
필수 항목
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 2, required = true) private String clientNr; @DataField(pos = 3, required = true) private String firstName; @DataField(pos = 4, required = true) private String lastName; }
이 필드가 레코드에 없는 경우 오류보다 다음 정보를 사용하여 구문 분석기에 의해 발생합니다.
일부 필드가 누락됨(선택 사항 또는 필수 사항), 행 :
케이스 6 : 트리트
필드에 처리 전에 제거해야 하는 선행 및/또는 후행 공백이 있는 경우 'trim' 속성을 true로 설정하면 됩니다.
Trim
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1, trim = true) private int orderNr; @DataField(pos = 2, trim = true) private Integer clientNr; @DataField(pos = 3, required = true) private String firstName; @DataField(pos = 4) private String lastName; }
case 7 : defaultValue
필드가 정의되지 않은 경우 defaultValue 특성에 표시된 값을 사용합니다.
기본값
@CsvRecord(separator = ",") public class Order { @DataField(pos = 1) private int orderNr; @DataField(pos = 2) private Integer clientNr; @DataField(pos = 3, required = true) private String firstName; @DataField(pos = 4, defaultValue = "Barin") private String lastName; }
이 속성은 선택적 필드에만 적용됩니다.