java 前后端传参时 long会被自动转换成string 不想自动转换怎么解决
时间: 2024-10-24 15:08:43 浏览: 8
在Java中,当你从前端(通常是JavaScript)传递长整型(long)给后台(通常是Java服务),由于类型不匹配,有时会自动转换为字符串。这种行为是为了防止数据丢失或错误处理。如果你不想让这个转换发生,可以采取以下策略:
1. 使用`@RequestParam`注解标注接收方法的参数时,指定`required=false`和`defaultValue=0L`,这样如果前端未提供值,默认不会被解析为String,而是保持为Long类型。
```java
@GetMapping("/example")
public void handleRequest(@RequestParam(value = "id", required = false, defaultValue = "0") Long id) {
// 如果id为空,则默认为0L
}
```
2. 预先设置类型校验,比如使用`@Validated`和`@NotNull`注解来强制检查前端传递的值是否有效,而不是默认转换。
```java
@PostMapping("/example")
public ResponseEntity<?> handleRequest(@Valid @NotNull Long id) {
// 如果id为null,验证失败,响应状态码可能会为400 Bad Request
}
```
3. 对于JSON请求,可以在前端将Long直接序列化为字符串再发送,然后在后端手动解析为Long。
```javascript
axios.get('/api', { params: { id: JSON.stringify(1234567890) } })
```
在后端:
```java
@GetMapping("/api")
public YourResponse handleJsonId(@RequestParam String idStr) {
Long id = Long.parseLong(idStr); // 解析为Long
// ...
}
```
阅读全文