前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >org.springframework.http.converter.HttpMessageNotReadableException

org.springframework.http.converter.HttpMessageNotReadableException

作者头像
jack.yang
发布于 2025-04-05 13:21:54
发布于 2025-04-05 13:21:54
1220
举报

今天我们要探讨一个常见的错误:`org.springframework.http.converter.HttpMessageNotReadableException.` 这个错误通常在处理RESTful请求的时候出现,表示某个请求的HTTP消息不能被读取。它通常是由于客户端和服务器端之间的非法或不一致的数据传输引起的。那么接下来,我们将通过几个具体的示例来分析和解决这个错误。

## 示例一

在我们的第一个示例中,我们定义了一个简单的RESTful服务,该服务会将一个JSON结构体映射到实体类中。以下是我们的代码:

```java @RestController public class UserController { @PostMapping("/users") public ResponseEntity<Void> createUser(@RequestBody UserDto userDto) { // ... return ResponseEntity.status(HttpStatus.OK).build(); } } ```

我们的`UserDto`实体类定义如下:

```java public class UserDto { private String name; private int age; // getters and setters } ```

现在,我们向这个服务发送如下请求:

``` POST http://localhost:8080/users Content-Type: application/json { "name": "Tom", "age": "20" } ```

这时,我们会看到以下错误消息:

``` org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `int` from String "20": not a valid `int` value; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `int` from String "20": not a valid `int` value ```

问题出在客户端向服务端发送的请求中,age字段被错误地定义为了String类型。

解决方法:将请求中的age字段的类型改为int即可。

## 示例二

在我们的第二个示例中,我们定义了一个使用Spring Data JPA框架的RESTful服务。我们将手动检查一个由客户端发送到服务器的HTTP请求中路由到的资源是否存在,如果不存在,我们将会返回一个错误状态码和错误消息。

以下是我们的代码:

```java @RestController public class UserController { @Autowired private UserRepository userRepository; @GetMapping("/users/{id}") public User getUserById(@PathVariable Long id) { Optional<User> userOptional = userRepository.findById(id); if (!userOptional.isPresent()) { throw new HttpClientErrorException(HttpStatus.NOT_FOUND, "User not found"); } return userOptional.get(); } } ```

在这个例子中,我们需要匹配URI中的{id}部分到数据库中的一个用户。如果该用户不存在,我们将返回一个错误状态码和错误消息,否则,我们将返回用户信息。

现在,我们向这个服务发送如下请求:

``` GET http://localhost:8080/users/1000 ```

在这个请求中,我们明显看到了一个非法的用户ID。这时,我们会看到以下错误消息:

``` org.springframework.web.client.HttpClientErrorException: 404 Not Found ```

问题出在请求的URI中包含了一个不存在的ID,没有被正确地映射到实际的用户资源。

解决方法:处理请求前,我们需要先检查URI中的{id}部分,检查其对应的资源是否存在。如果资源不存在,我们应该返回一个错误状态码和错误消息。

## 总结

通过以上的两个示例,我们可以发现,在处理HTTP请求的过程中,一些常见的数据传输和逻辑错误会导致`org.springframework.http.converter.HttpMessageNotReadableException`的发生。为了避免这个问题,我们需要仔细检查请求的数据和URI匹配的资源是否合法。

对于这个错误,我们应该这样处理它:找出发生错误的数据或资源,分析原因,并修改请求数据或服务端代码,以防止这个错误的再次发生。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java】已解决:org.springframework.web.HttpMediaTypeNotSupportedException
已解决:org.springframework.web.HttpMediaTypeNotSupportedException
屿小夏
2024/09/15
7300
【Java】已解决:org.springframework.web.HttpMediaTypeNotSupportedException
如何完美解决 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse 错误
在Spring Boot项目中,org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error 是一个常见的错误。本博客将详细介绍该错误的原因、解决方案以及最佳实践,帮助开发者在项目中避免和处理此类错误。关键词:Spring Boot,JSON parse error,HttpMessageNotReadableException,异常处理。
猫头虎
2024/06/21
2.9K0
【Java】已解决:org.springframework.http.converter.HttpMessageNotWritableException
已解决:org.springframework.http.converter.HttpMessageNotWritableException
屿小夏
2024/09/15
1.4K0
【Java】已解决:org.springframework.http.converter.HttpMessageNotWritableException
【Java】已解决:org.springframework.web.client.HttpClientErrorException: 400
已解决:org.springframework.web.client.HttpClientErrorException: 400
屿小夏
2024/09/16
4720
【Java】已解决:org.springframework.web.client.HttpClientErrorException: 400
Spring3 RestTemplate
RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基础封装了更加简单易用的模板方法API。也就是说RestTemplate是一个封装,底层的实现还是java应用开发中常用的一些HTTP客户端。但是相对于直接使用底层的HTTP客户端库,它的操作更加方便、快捷,能很大程度上提升我们的开发效率。
HLee
2021/04/25
3.2K0
Spring3 RestTemplate
【Python】已解决:org.springframework.web.client.HttpServerErrorException: 500
在使用Spring框架进行Web开发时,开发者可能会遇到org.springframework.web.client.HttpServerErrorException: 500的报错问题。该错误通常发生在通过Spring的RestTemplate类发送HTTP请求时,服务器返回了500内部服务器错误。这种错误表示服务器在处理请求时遇到了意外情况,导致无法完成请求。
屿小夏
2024/07/13
4130
Spring Boot – 使用 ModelMapper 将实体映射到 DTO
在企业应用中,我们使用RESTful服务来建立客户端和服务器之间的通信。总体思路是客户端将请求发送到服务器,服务器用一些响应来响应该请求。一般来说,我们大多数应用程序都具有三个不同的层:Web层、业务层和数据库层。这些层中的对象大多彼此不同。例如,Web层对象与数据库层中的同一对象完全不同。由于数据库对象可能包含 Web 层对象中不需要的字段,例如自动生成的字段、密码字段等。
用户1418987
2023/10/26
1.3K0
Spring Boot – 使用 ModelMapper 将实体映射到 DTO
【Python】已解决:org.springframework.web.bind.MissingServletRequestParameterException
已解决:org.springframework.web.bind.MissingServletRequestParameterException
屿小夏
2024/09/05
3510
Spring Boot从零入门5_五脏俱全的RESTful Web Service构建
这一节我们正式进入Spring Boot的WEB服务开发,在WEB服务中,不可缺少的我们需要去提供API出来,那么就少不了设计API,而当前流行的一套API设计风格就是REST API ,接下来我们会介绍什么是RESTful API以及它的特点和如何去设计。完成设计后,我们会使用Spring Boot + MVC架构去实现一个RESTful Web Service。本文的所有内容都是经过多方面考察和参考官方资料,本着严谨的态度为自己也为一起学习的同学们负责,由浅入深,层层展开,让自己有不一样的收获。一起加油吧!
别打名名
2019/12/23
1.1K0
Spring Boot从零入门5_五脏俱全的RESTful Web Service构建
SpringMVC+RestFul详细示例实战教程(实现跨域访问)
**REST(Representational State Transfer)**,中文翻译叫“表述性状态转移”。是 Roy Thomas Fielding 在他2000年的博士论文中提出的。它与传统的 SOAP Web 服务区别在于,REST关注的是要处理的数据,而 SOAP 主要关注行为和处理。要理解好 REST,根据其首字母拆分出的英文更容易理解。
好好学java
2018/06/11
1.2K0
基于 MVC的 RESTful风格的实现
可以看到通过这个 RESTAPI都是通过对同一个资源==的操作,所不同的就是通过不同的HTTP方法来实现对资源不同的处理。
石的三次方
2021/01/05
7710
Spring WebClient vs RestTemplate——比较和特点
Spring 5 引入了一个名为 WebClient 的新反应式 Web 客户端。在这篇文章中,我将展示何时以及如何使用 Spring WebClient 与 RestTemplate。我还将描述 WebClient 提供的功能。
用户4235284
2023/10/14
1.2K0
每天用SpringBoot,还不懂RESTful API返回统一数据格式是怎么实现的?
有童鞋说,我们项目都做了这种处理,就是在每个 API 都单独工具类将返回值进行封装,但这种不够优雅;我想写最少的代码完成这件事,也许有童鞋说,加几个注解就解决问题了,说的没错,但这篇文章主要是为了说明为什么加了几个注解就解决问题了,目的是希望大家知其所以然。
二哥聊运营工具
2021/12/17
8330
每天用SpringBoot,还不懂RESTful API返回统一数据格式是怎么实现的?
Spring MVC 4 RESTFul Web Services CRUD例子(带源码)【这才是restful,超经典】
【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】
明明如月学长
2021/08/27
5400
spring_cloud config 配置中心及利用Github实现自动化热加载配置
    spring_cloud有着强大的生态支持,其自带的分布式配置中心可以有效解决分布式环境中配置不统一的问题,提供一个中心化的配置中心。并且依靠其spring_bus(rabbitMq提供订阅)和github或者gitlab自带的webhook(钩子函数)可以实现将修改好后的配置push到远程git地址后,通过访问配置服务器的endPoints接口地址,便可将配置中心的变化推送到各个集群服务器中。
chinotan
2019/04/03
1.1K0
spring_cloud config 配置中心及利用Github实现自动化热加载配置
补习系列-springboot 参数校验详解
在定义 Restful 风格的接口时,通常会采用 PathVariable 指定关键业务参数,如下:
美码师
2018/08/27
2.6K0
RestTemplate组件:ClientHttpRequestFactory、ClientHttpRequestInterceptor、ResponseExtractor【享学Spring MVC】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/09/18
4.7K0
RestTemplate组件:ClientHttpRequestFactory、ClientHttpRequestInterceptor、ResponseExtractor【享学Spring MVC】
【Java】已解决:ResponseEntityException的Spring MVC异常响应实体异常
已解决:ResponseEntityException的Spring MVC异常响应实体异常
屿小夏
2024/09/13
2100
SpringMVC 与 REST.
    我敢打赌这并不是你第一次听到或读到REST这个词。当讨论REST时,有一种常见的错误就是将其视为“基于URL的Web服务”—— 将REST作为另一种类型的RPC机制,只不过是通过简单的HTTP URL来触发。恰好相反,REST 和 RPC 几乎没有任何关系。RPC 是面向服务的,并关注于行为和动作;而REST 是面向资源的,强调描述应用程序的事物和名词。
JMCui
2018/08/01
1.2K0
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
Java_老男孩
2019/12/02
11.5K1
推荐阅读
【Java】已解决:org.springframework.web.HttpMediaTypeNotSupportedException
7300
如何完美解决 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse 错误
2.9K0
【Java】已解决:org.springframework.http.converter.HttpMessageNotWritableException
1.4K0
【Java】已解决:org.springframework.web.client.HttpClientErrorException: 400
4720
Spring3 RestTemplate
3.2K0
【Python】已解决:org.springframework.web.client.HttpServerErrorException: 500
4130
Spring Boot – 使用 ModelMapper 将实体映射到 DTO
1.3K0
【Python】已解决:org.springframework.web.bind.MissingServletRequestParameterException
3510
Spring Boot从零入门5_五脏俱全的RESTful Web Service构建
1.1K0
SpringMVC+RestFul详细示例实战教程(实现跨域访问)
1.2K0
基于 MVC的 RESTful风格的实现
7710
Spring WebClient vs RestTemplate——比较和特点
1.2K0
每天用SpringBoot,还不懂RESTful API返回统一数据格式是怎么实现的?
8330
Spring MVC 4 RESTFul Web Services CRUD例子(带源码)【这才是restful,超经典】
5400
spring_cloud config 配置中心及利用Github实现自动化热加载配置
1.1K0
补习系列-springboot 参数校验详解
2.6K0
RestTemplate组件:ClientHttpRequestFactory、ClientHttpRequestInterceptor、ResponseExtractor【享学Spring MVC】
4.7K0
【Java】已解决:ResponseEntityException的Spring MVC异常响应实体异常
2100
SpringMVC 与 REST.
1.2K0
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
11.5K1
相关推荐
【Java】已解决:org.springframework.web.HttpMediaTypeNotSupportedException
更多 >
加入讨论
的问答专区 >
1KOL擅长5个领域
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档