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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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 mvc SpringMVC中使用头的请求映射_Spring Mvc - Fatal编程技术网

Spring mvc SpringMVC中使用头的请求映射

Spring mvc SpringMVC中使用头的请求映射,spring-mvc,Spring Mvc,目前,我正在使用SpringMVC请求映射,使用头 以下是我的两种方法: 方法1: @RequestMapping(value = "/accounts", method = RequestMethod.GET, headers="Accept=application/vnd.se.company1.product1+json; version=2.0") @ResponseBody public ResponseEntity<String> loginVerionOne(fina

目前,我正在使用SpringMVC请求映射,使用头

以下是我的两种方法:

方法1:

@RequestMapping(value = "/accounts", method = RequestMethod.GET,
headers="Accept=application/vnd.se.company1.product1+json; version=2.0")

@ResponseBody
public ResponseEntity<String> loginVerionOne(final HttpServletRequest request){}

用逗号分隔两个标题:

headers = {"Accept=application/vnd.se.company1.product1+json", "version=3.0"})

内容协商有一些特殊属性:
消耗
产生
。在你的情况下是这样的

@RequestMapping(value = "/accounts", method = RequestMethod.GET,
produces="application/vnd.se.company1.product1+json; version=2.0")
但这并不能解决你的问题。Spring在查找匹配项时只考虑媒体类型和子类型。这是一种硬编码的行为

我可以提供两种解决方案:

解决方案1

仅映射到媒体类型,并具有单独的专用方法。差不多

@RequestMapping(value = "/accounts", method = RequestMethod.GET,
produces="application/vnd.se.company1.product1+json")
@ResponseBody
public ResponseEntity<String> login(final HttpServletRequest request){
   if(getVersion(request).equals(VERSION_2)) {
     loginVersion2(request);
@RequestMapping(value=“/accounts”,method=RequestMethod.GET,
products=“application/vnd.se.company1.product1+json”)
@应答器
公共响应登录(最终HttpServletRequest请求){
if(getVersion(request).equals(VERSION_2)){
登录转换2(请求);
解决方案2


实现您自己的映射条件。这并不困难,但在官方文档中没有参考。您必须搜索
org.springframework.web.servlet.mvc.condition.RequestCondition

,但Accept=application/vnd.se.company1.product1+json;version=2.0“这是一个标题的一部分。这不是两个不同的标题。@ManasiD不,不是。我在下面看到错误:org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException:找不到与servlet请求匹配的处理程序方法:path'/accounts',method'get',parameters map[[empty]]通过使用上面的标题。我阅读了更多的文章,发现使用RequestMappingHandlerMapping类,我们可以为请求映射编写自己的条件。但为此,我需要使用基于Spring MVC Java的配置,我们使用的是applicationContext.xml,而不是基于Java的配置。知道如何继续吗?@Manas您是否编写了自己的类扩展
RequestMappingHandlerMapping
,并像
一样在xml中配置bean,这样既可以进行xml配置,也可以进行基于java的配置,对吗?我已经这样做了,我得到的错误是:java.lang.NoSuchMethodError:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getUrlPathHelper()Lorg/springframework/web/util/UrlPathHelper;@ManasiD您写道您只有一个
applicationContext.xml
。您不需要额外的基于Java的配置。您可以查看实现。是的,我只是指上面的示例。在这个示例中,有一个类WebConfig,其中requestMappingHandlerMapping()方法被重写。因此,我在applicationContext.xml中注入了WebConfig类。从我读过的一些文章中,我了解到,对于自定义请求映射,我们需要基于java的配置。
@RequestMapping(value = "/accounts", method = RequestMethod.GET,
produces="application/vnd.se.company1.product1+json; version=2.0")
@RequestMapping(value = "/accounts", method = RequestMethod.GET,
produces="application/vnd.se.company1.product1+json")
@ResponseBody
public ResponseEntity<String> login(final HttpServletRequest request){
   if(getVersion(request).equals(VERSION_2)) {
     loginVersion2(request);