首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Json-View不支持反应式类型(Spring Web mvc,支持反应式类型)

Json-View不支持反应式类型(Spring Web mvc,支持反应式类型)
EN

Stack Overflow用户
提问于 2019-08-20 03:45:35
回答 1查看 240关注 0票数 0

在spring web mvc应用程序中,JsonView对响应式类型的支持有问题。Spring5在WebMvcConfig中通过ReactiveTypeHandler + taskExecutor配置支持反应式类型。数据正在返回,但JsonView被忽略,所有数据都将传递给订阅服务器。以下是代码示例:

代码语言:javascript
复制
@JsonView(Views.All.class)
@GetMapping(value = "/items", produces = MediaType.APPLICATION_STREAM_JSON_VALUE )
public Flux<Item> getItems() {
    return itemService.getItems();
}

对于非反应型,org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyAdviceChain#processBody通过JsonViewResponseBodyAdvice处理JsonView。但它不会在ReactiveTypeHandler中为反应式类型触发。

我知道在spring web reactive中,可以通过ServerResponse设置提示Jackson2CodecSupport.JSON_VIEW_HINT来支持json视图,但是这段代码:

代码语言:javascript
复制
@GetMapping(value = "/items", produces = MediaType.APPLICATION_STREAM_JSON_VALUE )
Mono<ServerResponse> getItems() {
    return ServerResponse
                .ok()
                .hint(Jackson2CodecSupport.JSON_VIEW_HINT, Views.All.class)
                .body(itemService.getItems(), Item.class);
}

在mvc中不起作用,它将抛出不受支持的异常HttpMediaTypeNotAcceptableException,因为此目标类型的值为false。

有什么提示或想法如何在web mvc上使用jsonViews机制来处理反应式类型吗?(在项目中无法将web mvc更改为reactive web,原因是某些需求),提前谢谢:)

EN

回答 1

Stack Overflow用户

发布于 2019-08-20 18:18:46

已发现解决方法可以使用MappingJacksonValue解决此问题。

代码语言:javascript
复制
@GetMapping(value = "/items", produces = MediaType.APPLICATION_STREAM_JSON_VALUE )
public Flux<MappingJacksonValue> getItems() {
    return itemService.getItems()
           .map(e -> {
               MappingJacksonValue value = new MappingJacksonValue(e);
               value.setSerializationView(Views.All.class);
               return value;
            });
}

不确定spring的这种行为是否正确,它可以被认为是一个bug,需要在webmvc上制造问题吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57563035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档