我正在呼叫第三方REST端点。
请求示例
{
"body": {
"accountNumber": "12345"
},
"header": {
"username": "someusername",
"password": "somepassword"
}
}
我创建了3个bean类
MyRequest.java
@Builder
@JsonDeserialize(builder = MyRequest.MyRequestBuilder.class)
public class MyRequest {
@JsonProperty("header")
private MyHeader header;
@JsonProperty("body")
private MyBody body;
}
MyBody.java
@Getter
@Builder
public class MyBody {
private String accountNumber;
}
MyHeader.java
@Getter
@Builder
public class MyHeader {
private String username;
private String password;
}
我正在使用
创建请求对象MyBody body = MyBody.builder().accountNumber("12345").build();
MyHeader header = MyHeader.builder().username("someusername").password("somepassword").build();
MyRequest request = MyRequest.builder().body(body).header(header).build();
一切正常。代码覆盖率为MyRequest.java是100%,但我的MyBody.java和MyHeader.java不是。对于所有字段,我得到的错误信息是&;Not covered by tests&;
通常我会为Response对象添加@Getter和@Setter。对于请求,我只添加@Builder注释。在这种情况下,如果我从MyBody和MyHeader中删除@Getter,第三方REST端点将获得空值。看起来好像在将对象设置为MyRequest.java时调用了@Getter。但是由于某些原因,它没有被我的测试用例所覆盖。
如何使这个工作没有@Getter或有一种方法来覆盖所有字段(accountNumber,用户名和密码)与@Getter注释?如有任何帮助,不胜感激。
创建一个龙目表。配置并添加以下属性:
lombok.addLombokGeneratedAnnotation = true
对于Maven项目,一个名为lombok的文件。在项目的basedir配置是正确的位置,但其他方式/位置也可以适用,参见https://projectlombok.org/features/configuration
您需要以某种方式指示Jackson在序列化期间应该包含哪些数据。默认机制是为此目的使用getter。
将@Getter替换为@JsonProperty以获得100%的代码覆盖率
@Builder
public class MyBody {
@JsonProperty
private String accountNumber;
}
这不是我的答案。我从我的另一个帖子中得到了这个答案为什么第三方REST API's在删除@Getter Lombok注释时为请求字段获取空值
感谢@Alexander Ivanchenko