从Jackson自定义反序列化器访问HttpServletRequest对象

时间:2012-07-06 19:16:07

标签: json spring hibernate servlets jackson

我正在尝试使用JSON有效负载通过ajax POST发送对象;该对象引用了存储在数据库中的其他对象,由Hibernate处理;我需要访问此数据库以解析其他对象引用并将它们存储在获取反序列化请求的JSON有效负载的新对象中。

现在,我必须访问HttpServletRequest属性才能获得用于访问数据库的已保存的hibernate会话。有可能吗?

处理请求的控制器如下:

@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public @ResponseBody
Integer newProduct(HttpServletRequest request, @RequestBody Product product)
{
    //Controller code here
}

我必须能够获取请求属性“hibernate_session”的反序列化器是一个自定义反序列化器,注册到Jackson并且如下:

public class ProductDeserializer extends JsonDeserializer<Product>
{

    @Override
    public Product deserialize(JsonParser jpar, DeserializationContext arg1)
        throws IOException, JsonProcessingException
    {

            Product newProduct = new Product();
            // I want to get request attribute or open a new hibernate session here 
            return newProduct;
    }

}

如果需要,我会发布更多代码。

由于

1 个答案:

答案 0 :(得分:3)

您可以尝试以下方法

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder

                .getRequestAttributes()).getRequest();