从控制器返回带有CompletableFuture的SpringBoot 2.0 HttpMediaTypeNotAcceptableException

时间:2018-07-27 03:39:09

标签: java spring-boot java-8 postman

我在这里完全不知所措。让我解释一下我的问题:

根据此处的迁移指南Spring MVC Path Matching Default Behavior Change

他们显然已经改变了路径扩展和内容类型处理的行为。现在默认情况下处于关闭状态。

来到我的代码。我所有的REST API都有一个扩展名“ .htm”(以前的开发人员保留了它。不要问我为什么)。

问题:

  1. 我们有一个返回类型为CompletableFuture的Web服务。 代码:

        @PostMapping(value = "/search") 
        public CompletableFuture<Pojo> searchForStuff( 
        @RequestParam(value = "param1") String param1, 
        @RequestParam(value = "param2") double param2,       
        HttpServletRequest request, HttpServletRequest response) 
        {
    
                return manager.fetchSomething(param1, param2)
                    .thenApply(beans -> {
    
                    ... do something
                })
                .handle((responseBean, throwable) -> {
    
                 }
        }
    

我读到某处Spring支持completableFuture的完成阶段,以便在响应中对其进行处理。如您所见,handle()是完成阶段方法。但是在这里,无论我尝试哪种组合,每次都会给我HttpMediaTypeNotAcceptableException

我什至删除了CompletableFuture并简单地返回了一个响应bean(带有正确的杰克逊注释以及getter和setters),仍然不断给我这个错误。

  1. 在上面的代码段中,对于@PostMapping,如果我添加一个“ produces”值(认为spring对于一种内容类型可能感到困惑),则它甚至没有达到控制器方法

      @PostMapping(value = "/searchForDrives", produces = MediaType.APPLICATION_JSON_VALUE)
    

我在这里完全不知所措。我不知道我在这里犯了什么错误,或者这是SpringBoot 2.0的新事物。

PostMan的POST。

API call - http://localhost:8080/search.htm?param1=value1,param2=value2
Content-Type - application/x-www-form-urlencoded
Accept- application/json

我的Application.properties供参考:

# Disable JMX in every possible way
spring.application.admin.enabled=false
spring.jmx.enabled=false
spring.datasource.tomcat.jmx-enabled=false
spring.datasource.jmx-enabled=false
spring.jta.bitronix.properties.disable-jmx=false
spring.datasource.hikari.register-mbeans=false
spring.dao.exceptiontranslation.enabled=false

# Caching
spring.cache.type=none

# Servlet settings
server.servlet.context-path=/
server.servlet.path=/

spring.mvc.contentnegotiation.favor-path-extension=false
spring.mvc.pathmatch.use-suffix-pattern=true
#spring.mvc.view.suffix=.htm
spring.mvc.throw-exception-if-no-handler-found=false

spring.jackson.serialization.write-dates-as-timestamps=false
spring.jackson.mapper.auto-detect-getters=true

# Mybatis
mybatis.config-location=classpath:mybatis-config.xml
mybatis.configuration.auto-mapping-behavior=full

# Disable white lable
server.error.whitelabel.enabled=false

# Logging
debug=true
logging.level.com.fasterxml.jackson.databind=debug
logging.level.org.springframework.boot=debug
logging.level.org.springframework.security=off
logging.level.com.zaxxer.hikari.HikariConfig=off
logging.level.root=debug

0 个答案:

没有答案