Jackson / Spring 中响应体的自定义处理程序

发布时间:2021-03-08 13:31

我正在尝试拦截在我的控制器中返回的对象,以便在 Spring 调用 Jackson 的序列化过程之前创建响应的平面 JSON 结构。

我将支持一个查询参数,该参数允许客户端扁平化响应正文。类似的东西:

/v1/rest/employees/{employeId}/id?flat=true

控制器方法类似于:

public Employee getEmployee(...) {}

我希望避免在每次服务调用中都实现这种扁平化逻辑,并继续返回 Employee 对象。

Spring 中是否有某种工具可以让我 A) 读取查询字符串和 B) 拦截作为响应正文返回的对象?

回答1

这是一个想法。可能有更好的方法,但这会奏效:

定义一个额外的请求映射来进行平面映射:

int main (void)
{
    //...
    display (L.head);

“flatMapper”实现可以是你喜欢的任何东西,只要它有效。 一种选择是先使用 Jackson 的 ObjectMapper 将值写入 json,然后使用 https://github.com/wnameless/json-flattener 将其展平为您想要的输出。也可能有一种方法来定义一个自定义的 ObjectMapper 来进行平面映射,尽管这需要您做更多的工作。