【问题标题】:How to convert value of type String to Long using Spring Boot REST API如何使用 Spring Boot REST API 将 String 类型的值转换为 Long
【发布时间】: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中大概解析为floatdouble,仍然可以代表大量的longs。这主要取决于您希望 id 获得多大。否则,如果您想使用字符串来确保准确性,则将内部类型更改为 String (您可以在内部进一步转换),或者在其中添加一些自定义解析(不幸的是我不能说如何这样做)。
  • 这可能会有所帮助(双向):stackoverflow.com/questions/4268872/…(请参阅评论:“另一种方式是 @JsonDeserialize(as = Long.class)
  • @KeenanHillerbrand 你是对的; JSON 数字的确切范围是 ±2^52。一般情况下,建议将id 字段视为不透明的字符串,这样客户端就不会根据它们是整数/UUID/什么来做愚蠢的事情。

标签: java spring-boot rest type-mismatch


【解决方案1】:

如果你想自动转换,你不应该传递"id":"1"。您应该使用 "id": 1 传递 JSON(数字上不带引号)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2019-09-13
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多