Можно ли получить ContainerRequestContext или HttpHeaders в сериализаторах/десериализаторах Джексона?JAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Можно ли получить ContainerRequestContext или HttpHeaders в сериализаторах/десериализаторах Джексона?

Сообщение Гость »

У нас проблема с десериализаторами/сериализаторами Джексона, которые не дают мне доступа к ContainerRequestContext или HttpHeaders. Мы используем структуру Джерси/Джексона без Spring. Текущее решение теперь выглядит как код ниже, с ImprovedLocalThread, и это не стабильное решение.

Код: Выделить всё

public class MyValidatorFilter implements ContainerRequestFilter {

private static final ImprovedThreadLocal thread = new ImprovedThreadLocal();

// We dont want to use ThreadLocal..
public static ImprovedThreadLocal getCurrentRequestTemporaryKeyMap() {
return thread;
}

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
thread.set(new TemporaryKeyMap());
}
}

Код: Выделить всё

public class MyDeserializer extends StdDeserializer {
@Override
public T deserialize(JsonParser pJsonParser, DeserializationContext pDeserializationContext)
throws IOException {

// How can I get ContainerRequestContext here?
TemporaryKeyMap object = MyValidatorFilter.getCurrentRequestTemporaryKeyMap().get();

return null;
}
}
Как мы можем избавиться от ImrovedThreadLocal и получить ConteinerRequestContext из HttpHeaders в наших десериализаторах/сериализаторах?
Мы попытались передать содержимое области запроса через DeserializationContext.

Код: Выделить всё

public class MyValidatorFilter implements ContainerRequestFilter {

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
ObjectMapper          mapper                = new ObjectMapper();
DeserializationConfig deserializationConfig = mapper.getDeserializationConfig();
DeserializationConfig modifiedConfig        = deserializationConfig.withAttribute("datastring", requestContext.getProperty("datastring"));
mapper.setConfig(modifiedConfig);

...
}
}

Код: Выделить всё

public class MyDeserializer extends StdDeserializer {
@Override
public T deserialize(JsonParser pJsonParser, DeserializationContext pDeserializationContext)
throws IOException {

String token = (String) pDeserializationContext.getAttribute("datastring");

return null;
}
}
Это не потокобезопасно?

Источник: https://stackoverflow.com/questions/781 ... n-serializ
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»