You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JAX-RS PUT接口反序列化报错:无法将Object转为java.lang.Long

问题:PUT接口反序列化失败,无法将JSON对象转为Long类型

错误信息

Cannot deserialize value of type java.lang.Long from Object value (token JsonToken.START_OBJECT)
at [Source: (io.undertow.servlet.spec.ServletInputStreamImpl); line: 1, column: 1
]

代码片段

接口服务代码

@PUT
@Path("/{bookId}")
public Response editBook(@PathParam("bookId") Long bookId, Book newBook) {
    
    
    if (!JWTTokenAuth.validateJwtToken(JWTTokenAuth.extractTokenFromHeaders(headers))) {
        return Response.status(Response.Status.UNAUTHORIZED).build();
    }

    Book book = bookDao.getBookById(bookId);
    if (book == null) {
        return Response.status(Response.Status.NOT_FOUND).build();
    }

    book.setTitle(newBook.getTitle());

    bookDao.updateBook(book);

    return Response.ok().build();
}

Book实体类代码

@Entity
@Getter
@Setter
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String title;
    private String author;
    
    @OneToMany(mappedBy = "book")
    private List<Review> reviews;

}

请求信息

  • 请求地址:http://localhost:8080/api/books/2
  • 请求体:
{
    "title": "defgefgege"
}

问题原因

并非@PathParam的问题,而是请求体绑定逻辑混淆:
在JAX-RS(或Spring整合JAX-RS)环境中,方法多参数时需明确每个参数的来源。bookId通过@PathParam指定来自URL路径,但newBook未标注请求体绑定注解,导致框架错误地尝试将JSON请求体解析为Long类型(对应bookId参数),触发反序列化失败。

解决方案

方案1:添加请求体绑定注解(Spring环境)

在newBook参数前添加@RequestBody注解,明确该参数来自JSON请求体:

@PUT
@Path("/{bookId}")
public Response editBook(@PathParam("bookId") Long bookId, @RequestBody Book newBook) {
    // 原有逻辑不变
}

方案2:添加Consumes注解(纯JAX-RS环境)

在方法上添加@Consumes(MediaType.APPLICATION_JSON),指定请求体格式为JSON,确保框架将请求体绑定到实体类参数:

@PUT
@Path("/{bookId}")
@Consumes(MediaType.APPLICATION_JSON)
public Response editBook(@PathParam("bookId") Long bookId, Book newBook) {
    // 原有逻辑不变
}

内容的提问来源于stack exchange,提问作者Georgios Kourounis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:31:30