【发布时间】:2019-10-25 11:39:34
【问题描述】:
我使用 Lombok 进行注释。我需要覆盖其中一个属性的 setter 方法。但这不起作用。
我已使用 @Setter(AccessLevel.NONE) 注释该属性,然后显式调用 setProperty。
豆子在下面提到。
@Data
@AllArgsConstructor
@Slf4j
public class TestDto
{
private String code;
@Setter(AccessLevel.NONE)
private String nameCode;
public void setNameCode(String nameCode)
{
log.info(" nameCode {}", nameCode);
this.nameCode = <Call to some method>;
}
}
设置 bean 列表的 DTO。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TestViewDto {
private List<TestDto> testDtoList;
.............Few more dto's..............................
}
这是从下面的服务调用的..
travelAgentViewDto.setTestDto(repository.findTestNumber(number);
Repository 接口定义如下:
public interface Repository extends JpaRepository<Address, AddressPk> {
public List<TestDto> findTestNumber(String number);
}
代码运行良好。唯一的问题是当覆盖 setNameCode 时,相同的内容不会进入 setter。
来自setNameCode 方法的以下日志应打印:log.info(" nameCode {}", nameCode)
实际上电话并没有去那里。
【问题讨论】:
-
也许 JpaRepository 正在使用您的
@AllArgsConstructor而不是您的 setter。 -
我认为 JPA 使用反射或其他方法将数据从 db 获取到 pojo
-
尝试使用 delombok 查看 lombok 对您的代码做了什么,当您可能能够看到问题所在时。
标签: java spring-boot setter lombok