无法从 JAX-RS PUT 端点中的对象值(令牌“JsonToken.START_OBJECT”)反序列化“java.lang.Long”类型的值

问题描述 投票:0回答: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();
    }

这就是我的实体

@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

正确设置授权并将我的 JSON 有效负载设置为这样

{
    "title": "defgefgege"
}

我收到此错误,我认为它与 PathParam 有关? 无法从对象值(标记

java.lang.Long
)反序列化类型
JsonToken.START_OBJECT
的值 [来源:(io.undertow.servlet.spec.ServletInputStreamImpl);行:1,列:1 ]

java jax-rs
1个回答
0
投票

我怀疑问题不在你的Java代码中,而在PostMan中。您是否在 URL 中输错了参数或者忘记设置了?

我的猜测是 PostMan 没有发送此 URL:

http://localhost:8080/api/books/2

但是

http://localhost:8080/api/books/{bookID}

这可以解释您看到的错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.