使用Spring可以测试URL中是否存在参数?
下面,我当前的代码,但是也许f'Celcius: {celcius}, Fahrenheit: {celcius * 9 / 5 + 32}'
有点脏吧?
{}
在不同情况下将调用方法if(status == null)
:
这就是为什么我尝试寻找另一种方法来进行此测试的原因。
你能帮我吗?
谢谢。
答案 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版本,您可以使用Optional
和isPresent()
(但是必须使用status
从status.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> status
。 status.ifPresent()
之后,您可以检查状态是否存在:resources/views/errors