我用Lombok进行注释。我需要重写其中一个属性的 setter 方法。但这不起作用。
我已用 @Setter(AccessLevel.NONE)
注释了该属性然后显式调用 setProperty
.
下面提到了该 bean。
@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);
存储库接口(interface)定义如下:
public interface Repository extends JpaRepository<Address, AddressPk> {
public List<TestDto> findTestNumber(String number);
}
代码运行良好。唯一的问题是覆盖 setNameCode
时同样的情况不会进入 setter 内部。
来自 setNameCode
方法以下日志应打印:log.info(" nameCode {}", nameCode)
实际上,调用不会去那里。
最佳答案
正如 @Ravik 提到的,您不需要明确告诉 lombok 不要生成 setter;事实上,您编写了一个意味着一个“获胜”,并且 lombok 一开始就不会生成该 setter 。
您没有看到 setter 被调用的原因是...因为 JPA 不调用它。您有一个 @AllArgsConstructor
注释; THAT 正在由 JPA 调用。我对JPA不太熟悉;但是,我建议您使用 @NoArgsConstructor
来代替,从而强制 JPA 使用 setter。
关于java - lombok 之后未调用重写 Setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58557852/