我希望能够将一个请求范围的属性(一个 JAX-RS ContainerRequestContext
,因为我宁愿使用 Jackson 将我的参数转换为对象,而不是 JAX-RS 构思不佳和笨拙的 ParameterConverterProviders
)到 DeserializationContext
以便它可以从 JsonDeserializer
内获得。我必须调用 convertValue()
而不是简单的 readValue()
(不处理实际的 JSON)所以我无法在每个线程中创建 ObjectReader
除非我愿意先将我的映射序列化为 JSON 字符串然后再读回来 - 这将是令人难以置信的低效。
我希望能够以按请求的方式完成以下任务:
ObjectMapper om = new ObjectMapper();
//in request-scoped context:
om.getDeserializationContext().setAttribute("requestContext",containerRequestContext)
Map<String,Object> mapOfRequestParameters = ...
BeanOfVastImportance bean = om.convertValue(mapOfRequestParameters,BeanOfVastImportance.class)
如何在不需要为每个单独的请求线程创建新的 ObjectMapper 的大量多余开销的情况下实现这一点?
最佳答案
这可以通过以下方式实现:
objectMapper.reader().forType(Request.class)
.withAttribute("key", "value").readValue<Request>("source")
关于web-services - 以每个请求、线程安全的方式设置 Jackson DeserializationContext 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37756939/