由于不支持的媒体类型,无法在ExceptionHandler中获取ServerRequest的正文

时间:2019-11-19 15:14:56

标签: spring-webflux reactive

我想通过以下操作测试异常处理程序:

  • 发送带有XML有效负载的请求,该请求可以在我的应用中作为有效对象取消编组
  • 引发任意错误以触发ExceptionHandler
  • 发送带有与ServerRequest有效负载相同的主体的ServerResponse

当我尝试执行此操作时,我的bodyToMono(String.class)请求出现错误:

Content type 'application/json' not supported for bodyType=java.lang.String

这是我的异常处理程序:

@Component
@Order(-2)
public class ExceptionResolver extends AbstractErrorWebExceptionHandler {

    public ExceptionResolver(ErrorAttributes errorAttributes, ResourceProperties resourceProperties, ApplicationContext applicationContext, ServerCodecConfigurer configurer) {
        super(errorAttributes, resourceProperties, applicationContext);
        this.setMessageWriters(configurer.getWriters());
    }

    @Override
    protected RouterFunction<ServerResponse> getRoutingFunction(
            ErrorAttributes errorAttributes) {
        return RouterFunctions
                .route(RequestPredicates.all(), request ->
                        request.bodyToMono(String.class).log()
                        .doOnError(e -> {
                            System.out.println("errored :(");
                            System.out.println(e.getMessage());
                        }).flatMap(r -> ServerResponse.ok().contentType(MediaType.APPLICATION_XML).syncBody(r)));
    }

我在做什么错?我希望可以将任何类型的有效载荷提取为String.class。

1 个答案:

答案 0 :(得分:0)

我认为错误消息的答案很简单。您尝试将响应返回为appication / json,可能是因为您正在向响应添加内容类型标头,或者因为响应的默认内容类型是this,但是您试图返回的XML不适合json模式,它会崩溃