当前位置: 首页 > 知识库问答 >
问题:

Spring MockMvc修剪参数

刘和正
2023-03-14

我遇到了一个困扰我的问题。我正在运行最新版本的Spring和JUnit。我在试验MockMvc和Spring集成测试类,以查看它是否符合我公司的需要,并且运行良好,直到我试图提交一个请求,请求中包含一个@PathVariable,它是url中的一个版本号。

Pom;

<modelVersion>4.0.0</modelVersion>

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.3.RELEASE</version>
    </parent>
  <groupId>asd</groupId>
  <artifactId>asd</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>asd</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.1.6.RELEASE</spring.version>
  </properties>

  <dependencies>
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>compile</scope>
        </dependency>
    <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit-dep</artifactId>
            <version>4.5</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>

  </dependencies>

示例控制器;导入junit。框架明确肯定

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ExampleController {

    @RequestMapping(value = "/example/appVersion/{applicationVersion}")
    public @ResponseBody void example(@PathVariable("applicationVersion") String applicationVersion) {

        if (!"1.0.0.0".equals(applicationVersion)) {
            Assert.fail("I needed to be 1.0.0.0");
        }

    }
}

测试等级;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.WebIntegrationTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.web.context.WebApplicationContext;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:appContext.xml")
@WebIntegrationTest
public class ExampleProblem {

    @Autowired
    WebApplicationContext context;

    @Test
    public void test() throws Exception {
        String url = "/example/appVersion/1.0.0.0";
        // String url = "/example/appVersion/{applicationVersion}";

        //@formatter:off
        MvcResult result =  webAppContextSetup(context)
        .build()
        .perform(
            get(url)
//                              get(url, "1.0.0.0")
            .accept("application/json")
        ).andDo(print())
        .andExpect(status().is(200))
        .andReturn();
        //@formatter:on

        Assert.assertNotNull(result);
    }
}

我的appContext。xml文件仅包含此行(初始beans标记和结束标记除外);

<context:component-scan base-package="asd" />

当我查看进入示例控制器的请求时,我可以看到调试器显示 /example/appVersion/1.0.0.0但路径变量总是设置为“1.0.0”。似乎最后一个.0总是被删除,因为如果我传入“1.0.0.0.0”,它会修剪到预期的“1.0.0.0”。

任何可能导致这种情况或我做错了什么的见解都将不胜感激。

非常感谢。

共有1个答案

澹台宾白
2023-03-14

这是因为Spring解释了最后一个点(.)和以下字符作为文件扩展名。

为了解决这个问题,您需要通过添加“:”来告诉Spring参数需要点字符到控制器参数的末尾。现在的注释是这样的;

@RequestMapping(value = "/example/appVersion/{applicationVersion:.+}")
 类似资料:
  • 本文向大家介绍JavaScript 修剪空白,包括了JavaScript 修剪空白的使用技巧和注意事项,需要的朋友参考一下 示例 要从字符串的边缘修剪空格,请使用String.prototype.trim: 许多JavaScript引擎(而非Internet Explorer)实现了非标准trimLeft和trimRight方法。目前,在该过程的第1阶段,有一项提议是标准化trimStart和tr

  • 问题内容: 我有一个StringBuilder对象,需要修剪(即,从任一端删除所有空白字符/ u0020及以下)。 我似乎找不到在字符串生成器中可以做到这一点的方法。 这是我现在正在做的事情: 这恰好给出了所需的输出,但是它需要分配两个字符串,而不是一个。当字符串仍在StringBuilder中时,有没有更有效的方法来修剪字符串? 问题答案: 您不应使用deleteCharAt方法。 正如鲍里斯指

  • 问题内容: 是否有Python函数可以从字符串中修剪空白(空格和制表符)? 例如:→ 问题答案: 对于两侧的空格,请使用: 对于右侧的空格,请使用: 对于左侧的空格: 正如thedz所指出的,您可以提供一个参数来将任意字符剥离到以下任何函数中: 这将去除任何空间,,,或从左侧字符,右手侧,或该字符串的两侧。 上面的示例仅从字符串的左侧和右侧删除字符串。如果还要从字符串中间删除字符,请尝试: 那应该

  • 问题内容: 是否有Python函数可以从字符串中修剪空格(空格和制表符)? 例如: 问题答案: 两侧的空格: 右侧的空格: 左侧的空白: 正如thedz所指出的,你可以提供一个参数来将任意字符剥离到以下任何函数中: 这将去除任何空间,,或从左侧字符,右手侧,或该字符串的两侧。 上面的示例仅从字符串的左侧和右侧删除字符串。如果还要从字符串中间删除字符,请尝试: 那应该打印出来:

  • 问题内容: 如何修剪Java中的字符? 例如 j 应该是 “乔\吉尔” j 应该是 “ \ joe \ jill \” 等等 问题答案: Apache Commons 有一个很棒的StringUtils类(org.apache.commons.lang.StringUtils)。其中有一种方法可以满足您的需求。 我强烈建议无论如何都要使用Apache Commons,尤其是Collections和

  • 问题内容: 如何在Django中charField的末尾去除空格(trim)? 这是我的模型,如您所见,我已经尝试过使用干净的方法,但是这些方法永远不会运行。 我也尝试过这样做,但是这些也不起作用。 有没有办法强制为我自动修剪charField? 谢谢。 编辑:将代码更新为我的最新版本。我不确定我在做什么错,因为它仍然没有剥离空白(修剪)名称字段。 问题答案: 必须调用模型清洗(这不是自动的),因