lombok

时间:2019-10-25 11:39:34

标签: java spring-boot setter 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);

存储库接口定义如下:

public interface Repository extends JpaRepository<Address, AddressPk> {
        public List<TestDto> findTestNumber(String number);

}

代码运行正常。唯一的问题是,在覆盖setNameCode时,不会在setter中使用相同的内容。

应从setNameCode方法打印以下日志:log.info(" nameCode {}", nameCode)

实际上,呼叫并没有到达那里。

2 个答案:

答案 0 :(得分:4)

正如@Ravik所提到的,您不需要显式地告诉lombok不要生成setter;您写了一个事实意味着一个“胜利”和龙目岛一开始就不会产生那个二传手。

您没有看到被调用的setter的原因是...,因为JPA没有调用它。您有一个@AllArgsConstructor批注; JPA正在调用。我对JPA不太熟悉;但是,我建议您改为使用@NoArgsConstructor,从而迫使JPA使用设置器。

答案 1 :(得分:2)

您不需要使用

 @Setter(AccessLevel.NONE)

因为注释将隐藏setter方法。而是只需添加setter方法,它将起作用。