声纳显示DTO类私人领域的问题

时间:2017-10-27 09:07:29

标签: java json sonarqube

我有这个DTO课程:

class DTO{
    private String a;

    public DTO(String a){
        this.a = a;
    }
}

我是JSON使用Gson序列化此类并将其发送到其他应用程序。

我不需要这堂课的吸气剂。对于这一类,声纳显示以下问题:

"Remove this unused "a" private field."

我应该忽略这个声纳问题还是有另一种理想的方法来更改我的代码以消除这个声纳错误?

2 个答案:

答案 0 :(得分:1)

SonarQube提出的问题在这个例子中是误报。 您最好的做法是在SonarQube上标记它。

如果您的DTO文件遵循一致的命名模式, 那么默认情况下配置SonarQube以忽略这些文件中的这个问题也会很有趣。有关详细信息,请参阅documentation忽略多个条件的问题部分。

答案 1 :(得分:0)

为了防止SonorQube对您的DTO误报,您可以使用AutoValue作为库来创建DTO:

@AutoValue
@AutoGson(autoValueClass = AutoValue_DTO.class)
public abstract class DTO
{
    public abstract String getA();
}

将AutoGson定义为:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AutoGson
{
    Class autoValueClass();
}

和Gson类型的适配器定义为:

public class AutoValueTypeAdapterFactory implements TypeAdapterFactory
{
    @SuppressWarnings("unchecked")
    @Override
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type)
    {
        Class<? super T> rawType = type.getRawType();

        AutoGson annotation = rawType.getAnnotation(AutoGson.class);
        if (annotation == null)
        {
            return null;
        }

        return (TypeAdapter<T>) gson.getAdapter(annotation.autoValueClass());
    }
}

由Gson用作:

Gson gson = new GsonBuilder().registerTypeAdapterFactory(new AutoValueTypeAdapterFactory())