我在这里完全不知所措。让我解释一下我的问题:
根据此处的迁移指南Spring MVC Path Matching Default Behavior Change
他们显然已经改变了路径扩展和内容类型处理的行为。现在默认情况下处于关闭状态。
来到我的代码。我所有的REST API都有一个扩展名“ .htm”(以前的开发人员保留了它。不要问我为什么)。
问题:
我们有一个返回类型为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),仍然不断给我这个错误。
在上面的代码段中,对于@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