【发布时间】:2021-03-30 20:37:56
【问题描述】:
我用 Spring Boot 制作了一个 Restful API。我的一种方法是删除,它采用响应对象并执行一些其他查询,最终根据条件从数据库中删除对象。但是,由于尝试将 String 转换为 Long 的类型不匹配,它在函数体之前失败。
我在不使用 Long 类型的请求中使用 JSON,所以我改用 "id":"1" 这样的字符串,由于某种原因它不会转换。有人有什么建议吗?
响应对象:
public class Response {
private long id;
private String key;
private String value;
private String group;
public Response(String key, String value, String group) {
this.key = key;
this.value = value;
this.group = group;
}
我使用GeneratedValue(strategy = GenerationType.IDENTITY) 自动创建 ID。
尝试将 JSON 转换为 Response 对象时似乎失败了:
public ResponseEntity<String> deleteResponse(@RequestBody Response response) {
}
【问题讨论】:
-
您是否有理由不使用 JSON 编号?
"key": 1 -
@BillyBrown 我相信在转换过程中会发生舍入,因为 JSON 不支持 long。谁能确认一下?
-
这取决于数字有多大。 JSON数字在Java中大概解析为
float或double,仍然可以代表大量的longs。这主要取决于您希望 id 获得多大。否则,如果您想使用字符串来确保准确性,则将内部类型更改为String(您可以在内部进一步转换),或者在其中添加一些自定义解析(不幸的是我不能说如何这样做)。 -
这可能会有所帮助(双向):stackoverflow.com/questions/4268872/…(请参阅评论:“另一种方式是
@JsonDeserialize(as = Long.class)” -
@KeenanHillerbrand 你是对的; JSON 数字的确切范围是 ±2^52。一般情况下,建议将
id字段视为不透明的字符串,这样客户端就不会根据它们是整数/UUID/什么来做愚蠢的事情。
标签: java spring-boot rest type-mismatch