Как получить HttpServletRequest в Джексоне Пользовательская аннотация класса JsonSerialize - PullRequest
0 голосов
/ 20 мая 2019

Я не могу получить HttpServletRequest, используя @Context HttpServletRequest httpRequest; значение равно нулю

Не удалось зарегистрировать класс в качестве провайдера, и он не является частью иерархии наследования ресурсов Джерси

public class EncryptFieldHelper  extends StdSerializer<Object> implements ContextualSerializer{

    @Context
    HttpServletRequest httpRequest;

    private static final long serialVersionUID = 1L;
    private static final String MASKING_PATTERN = "(?=\\w{5})\\w";
    private String value;

    public EncryptFieldHelper(){
        super(Object.class);
    }

    public EncryptFieldHelper(String value){
        super(Object.class);
        this.value = value;
    }

    @Override
    public JsonSerializer<?> createContextual(SerializerProvider serializerProvider, 
            BeanProperty property) throws JsonMappingException {

        String annValue = "UNKNOWN";
        EncryptField encryptField = null;
        if (property != null) {
            encryptField = property.getAnnotation(EncryptField.class);
            if (encryptField == null) {
                encryptField = property.getContextAnnotation(EncryptField.class);
            }
        }
        if (encryptField != null) {
            annValue = encryptField.value();
        }
        return new EncryptFieldHelper(annValue);
    }

    @Override
    public void serialize(Object data, JsonGenerator jsonGenerator, 
            SerializerProvider serializerProvider) throws IOException {     
        try {
            if(data instanceof String){
                if(value.equals("mask")){
                    jsonGenerator.writeString(((String)data).replaceAll(MASKING_PATTERN, "*"));
                }
                else{
                    jsonGenerator.writeString("enc_"+Hex.encodeHexString(SymmetricCipherHelper
                            .encrypt((String)data, "AES").getBytes()));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
...