Создайте пользовательскую аннотацию, которая использует @JsonIgnore на основе значения в переменной среды в Java - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужно создать новую аннотацию, которая используется для игнорирования поля в выходном файле JSON, когда переменная среды var == false.Я пытался использовать JsonAnnotationIntrospector, но не смог получить ожидаемый результат.

public class Vehicle {
    String vehicle_name;
    String vehicle_model;
    //getters and setters  
    @MyAnnotation
    public String getVehicle_model() {
        return vehicle_model;
    }
}

Здесь мне нужно удалить атрибут vehicle_model, когда переменная среды var == false.

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@JsonIgnore
public @interface MyAnnotation {
}

Это объявление моей пользовательской аннотации.Может кто-нибудь сказать мне, как мне написать часть «Интроспектора», чтобы получить необходимые мне функции?

Заранее спасибо.

Редактировать: Моя попытка JacksonAnnotationIntrospector

public class MyAnnotationIntrospector extends JacksonAnnotationIntrospector {
@Override
public boolean hasIgnoreMarker(AnnotatedMember annotatedMember) {
    //need this part
   }
 }

И реализация ObjectMapper составляет

 ObjectMapper mapper = new ObjectMapper();
 String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(this);

1 Ответ

0 голосов
/ 12 сентября 2018

как это

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface MyAnnotation {
}

public class Vehicle {

    private String vehicle_name;

    @MyAnnotation
    private String vehicle_model;
    //getters and setters

    public static void main(String[] args) throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        objectMapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {

            @Override
            public boolean hasIgnoreMarker(AnnotatedMember m) {

                if (!System.getenv("var").equals("true")) {
                    return false;
                }
                if(_findAnnotation(m, MyAnnotation.class) != null){
                    return true;
                } else {
                    return false;
                }
            });

        Vehicle vehicle = new Vehicle();
        vehicle.setVehicle_model("vehicle_model_value");
        vehicle.setVehicle_name("vehicle_name_value");

        String value = objectMapper.writeValueAsString(vehicle);
        System.out.println(value);
    }
}
...