Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring控制器不接受以.uri结尾的url_Spring_Spring Mvc - Fatal编程技术网

Spring控制器不接受以.uri结尾的url

Spring控制器不接受以.uri结尾的url,spring,spring-mvc,Spring,Spring Mvc,我已经定义了以下控制器 @Controller 公共类Hello控制器{ @RequestMapping(value = "/config/{name:.*}", produces = MediaType.TEXT_PLAIN_VALUE, method = RequestMethod.GET) @ResponseBody ResponseEntity<String> getValue(@PathVariable String name) { String value =

我已经定义了以下控制器

@Controller
公共类Hello控制器{

@RequestMapping(value = "/config/{name:.*}", produces = MediaType.TEXT_PLAIN_VALUE, method = RequestMethod.GET)
@ResponseBody
ResponseEntity<String> getValue(@PathVariable String name) {
    String value = "Hello World";
    return new ResponseEntity<String>(HttpStatus.OK);
}
@RequestMapping(value=“/config/{name:.*}”,products=MediaType.TEXT\u PLAIN\u value,method=RequestMethod.GET)
@应答器
ResponseEntity getValue(@PathVariable字符串名称){
String value=“Hello World”;
返回新的响应状态(HttpStatus.OK);
}
}

当我从浏览器ping url时,例如:

这个请求很有效

但是当我用url ping时

它只是在页面上弹出错误:
此请求标识的资源只能根据请求“接受”标题生成具有不可接受特征的响应。

我尝试了MessageConverters和configureContentNegotiation,但似乎没有任何效果。 我想知道spring是否将test.uri视为无效模式或保留关键字

我试过了。 弹簧4/Tomcat 7和8 Spring 5/Tomcat 9

尝试不同的正则表达式

而不是

.*
这意味着:除新行以外的任意字符数

试一试

也就是说 不同数量的a-z+一个点+不同数量的a-z

如果这是你想要的

如果你不需要任何图案,那就用吧

{name}
结帐

<>但是我会考虑你是否可以调整你的API,比如:

@RequestMapping(value = "/config/{name}/{type}", ...
我认为在URI中使用点不是一个好主意。 点表示您正在请求一个文件

结帐:

尝试不同的正则表达式

而不是

.*
这意味着:除新行以外的任意字符数

试一试

也就是说 不同数量的a-z+一个点+不同数量的a-z

如果这是你想要的

如果你不需要任何图案,那就用吧

{name}
结帐

<>但是我会考虑你是否可以调整你的API,比如:

@RequestMapping(value = "/config/{name}/{type}", ...
我认为在URI中使用点不是一个好主意。 点表示您正在请求一个文件

结帐:


Spring认为最后一个点后面的任何内容都是文件扩展名

为了克服这个问题

通过添加正则表达式映射修改@PathVariable定义

@RequestMapping(value = "/config/{name:.+}"
一个安全的猜测是


.abc
不是扩展名类型,
.uri
是一个扩展名,所以可能这就是第一个URL工作的原因,

Spring认为最后一个点后面的任何内容都是文件扩展名

为了克服这个问题

通过添加正则表达式映射修改@PathVariable定义

@RequestMapping(value = "/config/{name:.+}"
一个安全的猜测是


.abc
不是扩展类型,
.uri
是一个扩展,所以这可能就是您的第一个URL工作的原因,

我终于能够使用ContentNegotiationConfigurer并设置uri的内容类型来解决问题

    @Override
public void configureContentNegotiation(ContentNegotiationConfigurer contentNegotiationConfigurer) {
    contentNegotiationConfigurer.mediaType("uri", MediaType.TEXT_PLAIN);
}

我最终能够使用ContentNegotiationConfigurer和设置uri的内容类型来解决这个问题

    @Override
public void configureContentNegotiation(ContentNegotiationConfigurer contentNegotiationConfigurer) {
    contentNegotiationConfigurer.mediaType("uri", MediaType.TEXT_PLAIN);
}

你能解释一下为什么test.test,test.url工作,但是test.uri不工作吗?在回答中,我尝试了{name}和[a-z]*\.[a-z]*没有多少运气。我不能使用@RequestMapping(value=“/config/{name}/{type}”的模式,因为这对我们来说是一个非常大的改变。然后,也许可以尝试/somepath/{variable:.+}如我在上一个链接中所述。你能解释一下为什么test.test,test.url工作,但test.uri不工作吗?在回答中,我尝试了{name}和[a-z]*\.[a-z]*运气不好。我不能使用@RequestMapping(value=“/config/{name}/{type}”的模式,因为这对我们来说是一个非常大的变化,然后可能尝试/somepath/{variable:.+},如我上一个链接中所述