0

它无法在两个 URL 上运行

@GetMapping(value= {"/durationtrend/{moduleId}","/durationtrend/{moduleId}/{records}"},produces=MediaType.APPLICATION_JSON_VALUE)
public List<ExecutionDurationResource> getExecutionDurationByModuleId(@PathVariable("moduleId") Integer moduleId,@PathVariable("records") Integer records) {    
    return executionDurationService.getExecutionDuration(moduleId,records); 
}

http://localhost:8080/seleniumexecutiontrending/reports/durationtrend/427 --> 它不调用。 http://localhost:8080/seleniumexecutiontrending/reports/durationtrend/427/7-- >它执行。

我想以相同的方法执行两者

4

3 回答 3

0

你的问题是

@PathVariable("moduleId") Integer moduleId,@PathVariable("records") Integer records

您的 URL 都需要moduleIdrecords参数,在第一个 URL 中"/durationtrend/{moduleId}"您没有 records 参数,这就是您拥有的原因

org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException Resolved [org.springframework.web.bind.MissingPathVariableException:缺少整数类型的方法参数的 URI 模板变量“记录”]

这个错误

实际上,您可以通过多种方式实现此目标,例如使用 HttpServletRequest 和其他东西,但请记住您使用的是 spring,您需要使用 spring 框架来简化这些事情。

我建议的简单方法是使用两个单独的控制器并简化事情。

@GetMapping("/durationtrend/{moduleId}")
public void getExecutionDurationByModuleId(@PathVariable("moduleId") Integer moduleId) {
    return executionDurationService.getExecutionDuration(moduleId);
    System.out.println(moduleId);
}

@GetMapping("/durationtrend/{moduleId}/{records}")
public void getExecutionDurationByRecords(@PathVariable("moduleId") Integer moduleId, @PathVariable("records") Integer records) {
    return executionDurationService.getExecutionDuration(moduleId, records);
    System.out.println(moduleId);
    System.out.println(records);
}

这很容易理解,您可以在服务类中创建 getExecutionDuration(moduleId) 方法并轻松绕过它......

希望对您有所帮助...

于 2019-03-30T16:57:49.910 回答
0
 @GetMapping(value= {"/durationtrend/{moduleId}","/durationtrend/{moduleId}/{records}"},produces= MediaType.APPLICATION_JSON_VALUE)
public List getExecutionDurationByModuleId(HttpServletRequest request) {
    Map map= (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
    Integer moduleId=null,records=null;
    if(map!=null && map.get("moduleId")!=null){
        moduleId = Integer.valueOf(map.get("moduleId").toString());
    }
    if(map!=null && map.get("records")!=null){
        records = Integer.valueOf(map.get("records").toString());
    }
    System.out.println("moduleId:"+moduleId);
    System.out.println("records:"+records);
    //then you use modules and records , just judge  whether they are null?
    return executionDurationService.getExecutionDuration(moduleId,records);
}

我尝试了上面的代码。试试看,希望对你有帮助!

于 2019-03-30T02:07:00.923 回答
0
@GetMapping(value= "/module-execution-trend",produces=MediaType.APPLICATION_JSON_VALUE) 
     public List<ExecutionResource> getExecutionResult(@RequestParam("moduleId") Integer moduleId,@RequestParam(name="records",required=false,defaultValue="10")  Integer records ) 
     {
        System.out.println(moduleId); 
        System.out.println(records); 
         return executionService.getModuleExecutionResult(moduleId,records);
     }
于 2019-04-01T08:21:58.220 回答