spring - 如何防止 null RequestParam 引发异常?
问题描述
我正在使用 Kotlin 在 Spring Boot 环境中工作。我用@GetMapping 注释的方法制作了一个控制器。此方法有一些 @RequestParam 类型的参数声明为 Double 类型。如果我尝试在不提供这些参数的情况下调用我的方法,我的代码会引发以下异常:
java.lang.IllegalStateException: Optional double parameter 'latitude' is present but cannot be translated into a null value due to being declared as a primitive type.
我假设参数有默认值(可能是 0.0),但是 Kotlin 需要一个可以为 null 的对象,所以会引发异常。
如果我提供参数,一切正常,但如果没有提供参数,我希望我的代码工作。
我怎样才能避免这个异常?
这是我的控制器的样子:
@RestController
@RequestMapping("/api/stations")
class StationController {
@GetMapping
fun findAll(@RequestParam(value = "latitude", required = false) currentLatitude: Double,
@RequestParam(value = "longitude", required = false) currentLongitude: Double): ResponseEntity<List<Entity>> {
//Method body
}
解决方案
也许有关基本类型的文档的以下部分将对您有所帮助:
在 Java 平台上,数字在物理上存储为 JVM 基本类型,除非我们需要一个可为空的数字引用(例如 Int?)或涉及泛型。在后一种情况下,数字被框起来。
那么你的猜测可能是正确的。尝试使用Double?
,应该没问题。
推荐阅读
- sql-server - 如何将 Debezium SQL Server 连接器与 ksqlDB 嵌入式连接一起使用?
- git - 将“Fix #x”提交到默认分支不会关闭 Github 上的问题
- javascript - 从 fetch/async 中调用的函数返回不同的 HTML 元素
- java - 在android上使用javamail时如何解决java.lang.VerifyError
- arrays - Kotlin 编辑文本
- rust - 一次借用结构的切片和字段的索引时无法推断正确的生命周期
- r - 如何将一列粘贴到另一列?
- c++ - C ++如何将类的类型成员作为模板参数传递?
- powershell-4.0 - powershell 搜索命令中未显示完整文件路径
- python - 通过 Boto3 为 DynamoDB 中的每一行更新一个列?