【问题标题】:MockMVC @PathVariable not work when using String使用 String 时 MockMVC @PathVariable 不起作用
【发布时间】:2021-04-28 19:33:03
【问题描述】:

当 Pathvariable 是 String 但适用于 int 时,Mockmvc 测试不起作用。 这是我的代码:

@Controller
@RequestMapping("/etablissement/{typeEtablissement}")
public class EtablissementController{
    @RequestMapping(method = RequestMethod.GET)
    public String accueil(@PathVariable("typeEtablissement") String typeEtablissement) {
        return "/test";
    }
}

// somewhere in my test
mockMvc.perform(get("/etablissement/{typeEtablissement}", "test")).andExpect(status().isOk()); // Error 400

但是,如果我使用 int 而不是 String 它可以工作

@RequestMapping(method = RequestMethod.GET)
public String accueil(@PathVariable("typeEtablissement") int typeEtablissement) {
    return "/test";
}

// somewhere in my test
mockMvc.perform(get("/etablissement/{typeEtablissement}", 123)).andExpect(status().isOk()); // Works

使用对象也可以

public String accueil(@PathVariable("typeEtablissement") Object typeEtablissement) {}

感谢您的帮助!

【问题讨论】:

    标签: spring-boot spring-mvc mockito mockmvc


    【解决方案1】:

    这是一个可以帮助您的 GetMapping 示例:

    @GetMapping("/{typeEtablissement}/{something2}/{something3}")
        public List<Object> extract(
                @PathVariable String typeEtablissement,
                @PathVariable String something2,
                @PathVariable String something3) {
    
    List<Object> object = objectService.extractDatas(typeEtablissement, something2, something3);
    
    return object;
    }
    

    【讨论】:

    • 不行,还是不行。我已经试过了
    【解决方案2】:

    奇怪,因为这意味着 typeEtablissement 是一个 int。您也可以在使用 valueOf 之后创建一个新变量:

    @GetMapping("/{typeEtablissement}/{something2}/{something3}")
        public List<Object> extract(
                @PathVariable String typeEtablissement,
                @PathVariable String something2,
                @PathVariable String something3) {
    
    String typeEtablissementConverted = String.valueOf(typeEtablissement );
    
    List<Object> object = objectService.extractDatas(typeEtablissementConverted, something2, something3);
    
    return object;
    }
    

    【讨论】:

    • 不,它将是一个字符串。我刚刚注意到它仅在我使用@PathVariable String 时不起作用。此外,应用程序现在工作正常,只是我的 Web 层测试的 Spring MockMVC 不起作用。你说的很奇怪
    猜你喜欢
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多