首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

SpringMVC 接收 POST JSON 实体数据完整配置指南

     編輯:Java 綜合教學

SpringMVC 接收 POST JSON 实体数据完整配置指南

前后端分离架构下,Controller 接收 application/json 请求体是高频场景。本文涵盖注解用法、消息转换器配置、依赖坐标、List 类型反序列化坑点、实体类设计建议及 C# 客户端调用示例。

Controller 标准写法

@ResponseBody
@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = "application/json")
public ReturnType handle(@RequestBody ParamType param, HttpServletRequest request) throws Exception {
    // 业务逻辑
}
  • @RequestBody:将请求体绑定到参数对象
  • consumes:限定 Content-Type,提升匹配精度

核心配置:消息转换器

SpringMVC 默认已注册 MappingJackson2HttpMessageConverter(需 Jackson 依赖),无需额外 XML 配置。若用 XML 配置:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
    </mvc:message-converters>
</mvc:annotation-driven>

Maven 依赖坐标

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>
<!-- 文件上传若需 -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

坑点:List<Entity> 反序列化为 LinkedHashMap

直接接收 List<MyEntity> 时,Jackson 会反序列化为 List<LinkedHashMap>,需手动转换:

ObjectMapper mapper = new ObjectMapper();
List<MyEntity> list = new ArrayList<>();
for (Object item : rawList) {
    list.add(mapper.convertValue(item, MyEntity.class));
}

更优方案:定义包装 DTO class RequestDTO { List<MyEntity> items; },直接接收 DTO,利用泛型类型信息自动反序列化。

实体类设计避坑指南

场景问题对策
C# 客户端调用DateTime 序列化格式不兼容实体类日期字段用 String 接收,服务端再解析
字段命名驼峰 vs 下划线统一加 @JsonProperty 或配置 PropertyNamingStrategy.SNAKE_CASE
空值处理null 字段是否序列化@JsonInclude(JsonInclude.Include.NON_NULL)

C# 客户端调用示例

string dataJsonString = JsonConvert.SerializeObject(entity);
byte[] buffer = Encoding.UTF8.GetBytes(dataJsonString);

HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(uri);
httpReq.Method = "POST";
httpReq.ContentType = "application/json; charset=utf-8";
httpReq.ContentLength = buffer.Length;
httpReq.GetRequestStream().Write(buffer, 0, buffer.Length);

HttpWebResponse httpResp = (HttpWebResponse)httpReq.GetResponse();
string result = new StreamReader(httpResp.GetResponseStream(), Encoding.UTF8).ReadToEnd();

总结

  1. 核心:@RequestBody + Jackson 依赖 + consumes=application/json
  2. 集合类型务必用包装对象避免类型擦除导致反序列化异常
  3. 跨语言调用统一日期格式为 ISO-8601 字符串
  4. 生产环境建议开启 FAIL_ON_UNKNOWN_PROPERTIES=false 增强兼容性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved