spring 设置接收json request 返回json类型response
在 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
:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// 注册 JSON 消息转换器
converters.add(new MappingJackson2HttpMessageConverter());
}
}
3. 使用 @RestController
注解控制器
@RestController
是 @Controller
和 @ResponseBody
的组合,确保方法返回值直接序列化为 JSON。
@RestController
@RequestMapping("/api/users")
class UserController {
// 处理 POST 请求,接收 JSON 输入
@PostMapping
fun 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
调整日期格式、字段命名策略等:
@Configuration
public class JacksonConfig {
@Bean
public 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):
{
"id": 1,
"name": "Bob",
"age": 25
}
7. 验证配置
使用 Postman 或 curl 测试接口:
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 优先级高。 |
日期格式不符合预期 | 配置 ObjectMapper 的 DateFormat 。 |
字段名不符合驼峰/下划线约定 | 通过 @JsonProperty 注解或 PropertyNamingStrategy 调整。 |
总结
通过以上配置,Spring 应用可以轻松实现 JSON 数据的接收和返回。关键点在于:
- 添加 Jackson 依赖。
- 使用
@RestController
和@RequestBody
注解。 - 配置消息转换器(Spring Boot 自动完成)。
- 通过
ObjectMapper
定制序列化行为。