检查是否在URL中指定了参数

时间:2019-02-13 19:20:55

标签: java spring spring-boot

使用Spring可以测试URL中是否存在参数?

下面,我当前的代码,但是也许f'Celcius: {celcius}, Fahrenheit: {celcius * 9 / 5 + 32}'有点脏吧?

{}

在不同情况下将调用方法if(status == null)

  • localhost:8080 / tasks
  • localhost:8080 / tasks /?status = ...

这就是为什么我尝试寻找另一种方法来进行此测试的原因。

你能帮我吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

在此答案的末尾查找更好的解决方案。

最好的方法是遵循单一责任模式。

由于可以通过两种不同的方式调用您的URL,为什么不拆分它,并让每个人都实现自己的逻辑呢?

@GetMapping
public ResponseEntity<?> getAllTasks() {
   return ResponseEntity.ok().body(this.taskResource.findAll());
}

@GetMapping
public ResponseEntity<?> getAllTasksWithStatus(@RequestParam("status") final int status) {
   return ResponseEntity.ok().body(this.tacheResource.getTachesByEtat(status));
}

春天会很好地处理这个问题。

请注意,当您将单个value属性与Annotation一起使用时,无需显式指定它。

编辑:由于这可能会产生映射冲突,因此@RequestParam的更好替代方案是将@PathVariable用于*WithStatus端点。

@GetMapping("/status/{status}")
public ResponseEntity<?> getAllTasksWithStatus(@PathVariable("status") final int status) {
    return ResponseEntity.ok().body(this.tacheResource.getTachesByEtat(status));
}

处理复杂的长URL时,有两条路要走。
使用@PathVariable,例如

/{status}/{date}/{name}

或请求一个POST HTTP请求。您可以在此处根据需要自定义body。在处理复杂的HTTP调用时,我通常会发出POST请求。


最后一次编辑,希望是:
您可以通过指定所需的查询参数来缩小映射范围。

@GetMapping
public ResponseEntity<?> getAllTasks() {
   return ResponseEntity.ok().body(this.taskResource.findAll());
}

@GetMapping(params = "status")
public ResponseEntity<?> getAllTasksWithStatus(@RequestParam("status") final int status) {
   return ResponseEntity.ok().body(this.tacheResource.getTachesByEtat(status));
}

没有更多冲突;)

由于params是一个数组,因此您可以指定多个值

@GetMapping(params = { "status", "date" })

答案 1 :(得分:1)

根据您的Java版本,您可以使用OptionalisPresent()(但是必须使用statusstatus.get()变量中获取值):< / p>

@GetMapping
public ResponseEntity<?> getAllTasks(@RequestParam("status") Optional<Integer> status) {
    if(!status.isPresent()) {
        return new ResponseEntity<>(this.taskResource.findAll(), HttpStatus.OK);
    }
    return new ResponseEntity<>(this.tacheResource.getTachesByEtat(status.get()), HttpStatus.OK);
}

答案 2 :(得分:1)

您可以在requestParam批注中使用@RequestParam("status") Optional<String> statusstatus.ifPresent() 之后,您可以检查状态是否存在:resources/views/errors