如何在FeignClient api类中使用matrixvariable?

时间:2017-03-17 04:20:48

标签: spring spring-boot netflix-feign spring-cloud-feign feign

我有一个FeignClient类,我想使用MatrixVariable传递参数 如下所示

@FeignClient(value = "apiService", url = "${api.url}", configuration =ApiServiceConfiguration.class)
public interface ApiServiceFeign {
    @RequestMapping(value = "/students{matrixParam}", method = RequestMethod.GET)
    StudentList getStudents(@MatrixVariable("matrixParam") Map<String,List<String>>);
}

但是当我使用上面的代码时,它不起作用。 Feign Client无法理解MatrixVariable。 有没有办法打这个电话?

目前,我已经找到了使用PathVariable的临时解决方案,如下所示

@FeignClient(value = "apiService", url = "${api.url}", configuration =ApiServiceConfiguration.class)
public interface ApiServiceFeign {
    @RequestMapping(value = "/students;name={name};accountId={accountId}", method = RequestMethod.GET)
    StudentList getStudents(@PathVariable("name") String name,@PathVariable("accountId") Long accountId);
}

如果有人在Feignclient中使用MatrixVariable提供更好的解决方案,我真的很感激

1 个答案:

答案 0 :(得分:0)

您必须在春季启用matrix variables usage。这可以通过以下方式完成。

请注意,要启用矩阵变量,必须将 RequestMappingHandlerMapping removeSemicolonContent 属性设置为 false 。默认情况下,它设置为true。

MVC Java配置和MVC命名空间都提供了启用矩阵变量使用的选项。 如果您使用的是Java配置,则“使用MVC Java配置进行高级自定义”部分介绍了如何自定义RequestMappingHandlerMapping。

在MVC名称空间中,元素具有enable-matrix-variables属性,该属性应设置为true。默认情况下,它设置为false。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven enable-matrix-variables="true"/>

</beans>