jackson/spring中响应体的定制处理程序

o4tp2gmn  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(306)

我试图截获在我的控制器中返回的对象,以便在spring调用jackson的序列化过程之前,创建一个响应的平面json结构。
我将支持一个查询参数,它允许客户机展平响应主体。比如:

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

控制器方法类似于:

public Employee getEmployee(...) {}

我希望避免在每次服务调用中实现这种扁平化逻辑,并继续返回 Employee 对象。
spring中是否有某种工具允许我a)读取查询字符串,b)截获作为响应体返回的对象?

2ic8powd

2ic8powd1#

这里有一个主意。也许有更好的方法,但这会奏效:
定义一个额外的请求Map来执行平面Map:

@RequestMapping(path = "/endpoint", params = {"flat"})
public String getFlatThing() {
    return flatMapper.writeValueAsString(getThing());
}

// The Jackson converter will do its ordinary serialization here.
@RequestMapping(path = "/endpoint")
public Thing getFlatThing() {
    return new Thing();
}

“flatmapper”的实现可以是任何你喜欢的,只要它工作。一种方法是使用jackson的objectmapper先将值写为json,然后使用https://github.com/wnameless/json-flattener 把它展平到你想要的输出。也可能有一种方法可以定义一个定制的objectmapper来进行平面Map,尽管这需要您做更多的工作。

相关问题