Pokazywanie postów oznaczonych etykietą adnotacja. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą adnotacja. Pokaż wszystkie posty

2016-12-20

GSON - ignorowanie pól przy pomocy własnej adnotacji

Tworzymy własną adnotację:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Exclude {
}

Klasę implementującą ExclusionStrategy:

import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;

public class AnnotationExclusionStrategy implements ExclusionStrategy {

    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        return f.getAnnotation(Exclude.class) != null;
    }

    @Override
    public boolean shouldSkipClass(Class clazz) {
        return false;
    }
}

Wykorzystujemy utworzoną adnotację w POJO:

public abstract class ExampleRequest {

    protected Long requestTime;
    protected String clientCode;
    @Exclude
    protected String hash;
}

Budujemy gsona np w taki sposób:

public class TestFacade {
    private static final Gson GSON;

    static {
        JsonDeserializer longToDateAdapter = (json, typeOfT, context) -> new Date(json.getAsJsonPrimitive().getAsLong());
        GSON = new GsonBuilder()
                .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
                .registerTypeAdapter(Date.class, longToDateAdapter)
                .setExclusionStrategies(new AnnotationExclusionStrategy())
                .create();
    }
}
Najważniejsza w tym przykładzie jest metoda setExclusionStrategies(new AnnotationExclusionStrategy()) dzięki której cała magia działa. źródło: http://stackoverflow.com/a/27986860/767529

2016-02-28

JavaEE - Annotation Type Schedule

Za pomocą adnotacji @Schedule istnieje możliwość odpalenia kawałka kodu w określonych odcinkach czasu - jest to coś podobnego do Cron'a na serwerach linuksowych.

Poniżej przestawiam przykład, w którym widać zastosowanie tej adnotacji - Metoda init() będzie uruchamiana co 5 minut.

package pl.marceen.schedule;

import org.apache.log4j.Logger;

import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.ejb.Startup;

/**
 * @author Marcin Zaremba
 */
@Singleton
@Startup
public class ScheduleTest {

    private static final Logger logger = Logger.getLogger(ScheduleTest.class);

    @Schedule(persistent = false, hour = "*", minute = "*/5")
    public void init() {
        logger.info("Method init() started.");
    }

}

Więcej możliwościach tej adnotacji: docs.oracle.com