JavaBeanio如何将抽象类或接口映射为记录或段
如何使用BeanIO注释定义接口的一段? 在我的示例中,我只能使用@Field信息获取lineResponse,@Segment不可见
ParserWriter结果:
2021051211362850OK Tutto bene
1行的设计结果:
2021051211362850EPPDNY81 D91138414510 20210512 F OK Tutto bene
答复。类,该类包含LineResponse的列表。阶级
@Data
@NoArgsConstructor
@Group(minOccurs=0, maxOccurs= -1, type = Response.class)
public class Response {
@Record(minOccurs=1, collection = List.class, name="responseLineList", type=LineResponse.class)
List<LineResponse> responseLines;
}
在下面的类LineResponse中。类,它是一个带有接口的@段
@Data
@NoArgsConstructor
@Record
public class LineResponse implements Serializable {
@Field(ordinal = 1, required = true, length=16, format = "yyyyMMddhhmmssSS")
Date elaboratedOn;
@Segment(ordinal =2, name="requestLine", minOccurs = 1, maxOccurs = 1)
RequestLine line;
@Field(ordinal = 3, required = true, length=9)
String errorCode;
@Field(ordinal = 4, length=36)
String errorMessage;
}
接口代码:
public interface RequestLine {}
混凝土试车线等级代码:
@Data
@NoArgsConstructor
@Record
public class TestLine implements RequestLine {
@Field(required = true, length=4, maxLength=4)
private String recordType;
@Field(required = true, length=1, maxLength=1)
private String messageKO;
@Field(required = true, length=1, maxLength=1)
private String messageOK;
@Field(required = true, length=1, maxLength=1)
private String divisionCode;
@Field(required = true, length=13, maxLength=13)
private Integer progressive;
@Field(required = true, length=1, maxLength=1, defaultValue = "D")
private String prefixItemCode;
@Field(required = true, length=9, maxLength=9)
private String itemCode;
}
混凝土试验线B类代码:
@Data
@NoArgsConstructor
@Record
public class TestLineB implements RequestLine {
@Field(required = true, length=9, maxLength=9)
private String itemCode;
@Field(required = true, length=7, maxLength=7)
private BigDecimal quantity;
@Field(required = false, length=1, maxLength=1)
private String cancellation;
@Field(required = true, length=3, maxLength=3)
private String productionLine;
}
这是我使用StreamFactory进行测试的代码
// Filling mock Response with lines
LineResponse lineResponse = new LineResponse();
lineResponse .setElaboratedOn(new Date());
lineResponse .setLine(testLine);
lineResponse .setErrorCode("OK");
lineResponse .setErrorMessage("Tutto bene");
List<LineResponse> lineResponseList = new ArrayList<>();
lineResponseList .add(lineResponse );
Response response = new Response();
response.setResponseLine(lineResponseList);
Writer writer = new StringWriter();
String writerName = "ResponseFile";
// create a StreamFactory
StreamFactory factory = StreamFactory.newInstance();
factory.define(
new StreamBuilder(writerName)
.writeOnly()
.format("fixedlength")
.parser(new FixedLengthParserBuilder())
.addGroup(Response.class)
);
BeanWriter out = factory.createWriter(writerName, writer);
// JAVA to Writer
out.write(response);
共 (0) 个答案