gpt4 book ai didi

java - 为什么当参数以(.pl)结尾时,Spring MVC @RequestMapping 抛出 406 映射错误(/user/{username :. +})

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:01 25 4
gpt4 key购买 nike

@RequestMapping(value = "/user/{username:.+}", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
User user(@PathVariable String username) {
User user = userRepository.findByUsername(username);
if (user == null)
throw new UserNotFoundException("User not found");

return user;
}

这是表示该操作的方法。 Controller 用 @RestController

注释

已解决

应该覆盖内容类型协商机制。

解释:http://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc

代码:

@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.mediaType("pl", MediaType.APPLICATION_JSON);
}

最佳答案

更新的答案

PathMatchConfigurer 尝试将每个/controller/path.* 与每个后缀匹配,尝试使用 ContentNegotiationManager 查找内容类型。您可以通过禁用此行为或使其仅在 .* 是注册后缀时尝试更改此行为。看这里:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-config-path-matching

您应该调用 pathMatchConfigurer.setUseRegisteredSuffixPatternMatch(true)pathMatchConfigurer。 setUseSuffixPatternMatch(假)

旧答案:)

我认为 Spring MVC 错误地认为 .pl 是一个扩展,并为此媒体类型查找 HTTPMessageConverter。在这种情况下,在这里创建一个转换器没有意义,但也许将其标记为不同的媒体类型会起作用吗?不过,我认为这只是一种解决方法。

我还认为您的 @RequestMapping 值可以很简单:value = "/user/{username}" - 您正在使用 RegEx .+ 作为您的用户名变量,这实际上意味着您无论如何都匹配整个模式。

关于java - 为什么当参数以(.pl)结尾时,Spring MVC @RequestMapping 抛出 406 映射错误(/user/{username :. +}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28456947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com