spring 设置接收json request 返回json类型response

ops/2025/3/30 2:45:29/

在 Spring 中配置接收 JSON 输入并返回 JSON 输出,可以按照以下步骤进行:

1. 添加依赖(非 Spring Boot 项目)

如果使用 Spring Boot,默认已集成 Jackson,无需额外配置。若为传统 Spring MVC 项目,需手动添加 Jackson 依赖:

<!-- Maven -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.3</version>
</dependency>

2. 配置消息转换器(非 Spring Boot 项目)

在 Spring MVC 配置类中注册 MappingJackson2HttpMessageConverter

java">@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {// 注册 JSON 消息转换器converters.add(new MappingJackson2HttpMessageConverter());}
}

3. 使用 @RestController 注解控制器

@RestController@Controller@ResponseBody 的组合,确保方法返回值直接序列化为 JSON。

@RestController
@RequestMapping("/api/users")
class UserController {// 处理 POST 请求,接收 JSON 输入@PostMappingfun createUser(@RequestBody user: User): User {// 保存用户逻辑return user}// 处理 GET 请求,返回 JSON 数据@GetMapping("/{id}")fun getUser(@PathVariable id: Long): User {return User(id, "Alice", 30)}
}

4. 定义数据模型(POJO)

确保模型类有无参构造函数和 getter/setter(Java)或使用 data class(Kotlin):

data class User(val id: Long? = null,val name: String,val age: Int
)

5. 自定义 JSON 序列化/反序列化(可选)

通过配置 ObjectMapper 调整日期格式、字段命名策略等:

java">@Configuration
public class JacksonConfig {@Beanpublic ObjectMapper objectMapper() {return new ObjectMapper().setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);}
}

6. 处理请求和响应

请求示例(POST /api/users):
POST /api/users HTTP/1.1
Content-Type: application/json{"name": "Bob","age": 25
}
响应示例(JSON):
json">{"id": 1,"name": "Bob","age": 25
}

7. 验证配置

使用 Postmancurl 测试接口:

curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{"name": "Bob", "age": 25}'

8. 常见问题排查

问题解决方案
415 Unsupported Media Type检查请求头 Content-Type: application/json 是否设置正确。
返回 XML 而非 JSON确保 Jackson 依赖已添加,且 MappingJackson2HttpMessageConverter 优先级高。
日期格式不符合预期配置 ObjectMapperDateFormat
字段名不符合驼峰/下划线约定通过 @JsonProperty 注解或 PropertyNamingStrategy 调整。

总结

通过以上配置,Spring 应用可以轻松实现 JSON 数据的接收和返回。关键点在于:

  1. 添加 Jackson 依赖。
  2. 使用 @RestController@RequestBody 注解。
  3. 配置消息转换器(Spring Boot 自动完成)。
  4. 通过 ObjectMapper 定制序列化行为。
文章来源:https://blog.csdn.net/LCY133/article/details/146500094
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/ops/169939.html

相关文章

【Excel使用技巧】某列保留固定字段或内容

目录 ✅ 方法一&#xff1a;使用 Excel 公式提取 body 部分 &#x1f50d; 解释&#xff1a; ✅ 方法二&#xff1a;批量处理整列数据 &#x1f6a8; 注意事项 &#x1f6a8; 处理效果 我想保留Excel某一列的固定内容&#xff0c;比如原内容是&#xff1a; thread entry i…

《Python实战进阶》第33集:PyTorch 入门-动态计算图的优势

第33集&#xff1a;PyTorch 入门-动态计算图的优势 摘要 PyTorch 是一个灵活且强大的深度学习框架&#xff0c;其核心特性是动态计算图机制。本集将带您探索 PyTorch 的张量操作、自动求导系统以及动态计算图的特点与优势&#xff0c;并通过实战案例演示如何使用 PyTorch 实现…

鸿蒙开发:父组件如何调用子组件中的方法?

前言 本文基于Api13 很多的场景下&#xff0c;父组件需要触发子组件中的某个方法&#xff0c;来实现一些特定的逻辑&#xff0c;但是ArkUI是声明式UI&#xff0c;不能直接调用子组件中的方法&#xff0c;那么怎么去实现这个功能呢&#xff1f; 举一个很常见的案例&#xff0c;通…

vscode 插件推荐

1、中文化插件 Chinese (Simplified) (简体中文) 2、中文标点符号转英文 中文标点符号转英文 3、标签补全 Auto Close Tag 4、git仓库信息查看 GitLens — Git supercharged 5、随机/顺序数据生成 Insert Sequences 6、html项目本地运行 Live Server 7、代码格式化 7.1、…

VMware打开ubuntu正在使用中怎么解决

1.如图1所示&#xff0c;打开ubuntu&#xff0c;出现该虚拟机正在使用中的情况&#xff1b; 图1 2.如图2所示&#xff0c;找到ubuntu文件夹下.lck的文件夹&#xff0c;删除它们即可&#xff1b; 图2 3.如图3所示&#xff0c;打开虚拟机正常&#xff0c;可以启动。 图3

物联网为什么用MQTT不用 HTTP 或 UDP?

先来两个代码对比&#xff0c;上传温度数据给服务器。 MQTT代码示例 // MQTT 客户端连接到 MQTT 服务器 mqttClient.connect("mqtt://broker.server.com:8883", clientId) // 订阅特定主题 mqttClient.subscribe("sensor/data", qos1) // …

万字C++STL——vector模拟实现

模拟实现总览 namespace wlw {//命名空间为了让其隔离//模拟实现vectortemplate<class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;//默认成员函数vector(); //构造函数vector(size_t n, c…

【从零实现Json-Rpc框架】- 第三方库介绍 - Muduo篇

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…