最近折腾了在 SpringMVC 直接传入 JSON 和 MyBatis 读出写入 JSON 的功能。
首先简单了解 Jackson 的类型系统:
- TreeNode 接口是根类型
- JsonNode 抽象类是 TreeNode 接口的直接实现,也是其他 Node 的基类
- 之上再分为 ValueNode 值节点和 ContainerNode 容器节点两种
- 最后是广为人知的 BooleanNode / StringNode / ArrayNode / ObjectNode 等节点
本文综述只有一句话:使用抽象基类,不要使用接口类型。
SpringMVC 里 Controller 中路由映射的方法的参数列表,可以配置 @RequestBody
注解,使某个参数来自解析后的 HTTP 的 body 内容,我们称之为 官网:www.fhadmin.org Form。Form 中需要使用 JsonNode 而不是 TreeNode。
HTTP 请求样例
{
"id": "1",
"custom": {
"key": "value"
}
}
Form 类
@Data
public classMyForm{
private String id;
private JsonNode custom;
}
本文默认使用自动生成代码的 lombok 包,@Data
和 @RequiredArgsConstructor
都出自该包。
路由映射的方法
@RestController
public classMyController{
@PostMapping("/my")
public Object myMethod(@RequestBody MyForm form){
...
}
}
如果我们希望从 MyBatis 官网:www.fhadmin.org 中正确读出写入,也要用 JsonNode 而不是 TreeNode。
@Data
public classUser{
private String id;
private JsonNode custom;
}
需要实现 JsonNodeTypeHandler 并注册到 MyBatis 的 SqlSessionFactory
import java.io.*;
import java.sql.*;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@MappedTypes(JsonNode.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public classJsonNodeTypeHandlerextendsBaseTypeHandler<JsonNode> {
private final ObjectMapper objectMapper;
@Override 官网:www.fhadmin.org
publicvoidsetNonNullParameter(PreparedStatement ps, int i, JsonNode parameter, JdbcType jdbcType)throws SQLException {
String json = parameter.toString();
ps.setString(i, json);
}
private JsonNode read(String json){
try {
return objectMapper.readTree(json);
} catch (JsonParseException e) {
if (LOG.isWarnEnabled()) {
LOG.warn("JSON parse failed", e);
}
return null;
} catch (IOException e) {
// should not occur, no real i/o...
throw new IllegalArgumentException(e.getMessage(), e);
}
}
@Override
public JsonNode getNullableResult(ResultSet rs, String columnName)throws SQLException {
String json = rs.getString(columnName);
return read(json);
}
@Override
public JsonNode getNullableResult(ResultSet rs, int columnIndex)throws SQLException {
String json = rs.getString(columnIndex);
return read(json);
}
@Override
public JsonNode getNullableResult(CallableStatement cs, int columnIndex)throws SQLException {
String json = cs.getString(columnIndex);
return read(json);
}
}
List<TypeHandler> typeHandlers = ...;
typeHandlers.add(new JsonNodeTypeHandler(objectMapper));
sqlSessionFactory.setTypeHandlers(typeHandlers.toArray(new TypeHandler[typeHandlers.size()]));
这样就大功告成了。
相关推荐
本示例项目"springMVC+mybatis+jackson+memcached"展示了如何整合四个关键的技术组件,来创建一个强大的后端架构。以下是对这些技术及其整合方式的详细说明: 1. **Spring MVC**:Spring MVC是Spring框架的一部分,...
Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+...
SpringMVC和MyBatis是Java Web开发中的两个核心框架,它们在构建高效、模块化的应用程序方面发挥着重要作用。SpringMVC是Spring框架的一部分,主要负责处理HTTP请求和响应,而MyBatis则是一个轻量级的持久层框架,...
完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统...
基于Spring+SpringMVC+Mybatis架构的博客系统:博客管理、图表数据、日志分析、访问记录、图库管理、资源管理、友链通知等。良好的页面预加载,无限滚动加载,文章置顶,博主推荐等。提供 用户端+管理端 的整套系统...
在IT行业中,Spring、SpringMVC和MyBatis是三个非常重要的开源框架,它们在企业级Web应用开发中被广泛使用。Spring作为一个全面的后端应用程序框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,极大地简化了...
Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...
在Java开发领域,Spring、SpringMVC和MyBatis是三个非常重要的框架,它们共同构建了一个强大而灵活的Web应用程序栈。Spring作为一个全面的后端开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,极大地...
本项目“图书管理系统”就是这样一个实例,它利用了SpringMvc和Mybatis两大主流框架,为图书管理提供了全面的解决方案。接下来,我们将深入探讨这两个框架在系统中的应用及其相关知识点。 首先,SpringMvc作为...
在IT行业中,SpringMVC和MyBatis是两个非常重要的框架,它们分别专注于Web应用程序的控制层和数据访问层。SpringMVC是Spring框架的一部分,提供了处理HTTP请求、视图渲染以及模型-视图-控制器(MVC)架构的支持。而...
标题 "Spring+SpringMVC+Mybatis资源课件" 提供了一个学习路径,涉及Java开发中的三个关键组件:Spring框架、SpringMVC和Mybatis。这些技术是构建现代企业级Web应用程序的基础,尤其是在Java世界中。 Spring框架是...
在当今的Java Web开发领域,SpringMVC和MyBatis作为两个极为重要的框架,被广泛应用于构建高效、灵活的后端服务。本示例项目"springmvc_mybatis查询示例"旨在帮助开发者了解如何将这两个框架有效地结合起来,实现...
本教程将深入讲解如何利用SpringMVC和Mybatis两大主流技术框架构建一个完整的CRM系统,旨在帮助开发者理解和实践SSM(SpringMVC、Spring、Mybatis)集成开发。 **一、SpringMVC框架** SpringMVC是Spring框架的一个...
在企业级Java应用开发中,SpringMVC和MyBatis是两个非常重要的框架。SpringMVC作为模型-视图-控制器(MVC)架构模式的实现,负责处理HTTP请求并将其转发到相应的业务逻辑,而MyBatis则是一个轻量级的持久层框架,...
SpringMVC和MyBatis是Java Web开发中常用的两个框架,它们分别负责控制层和数据访问层的工作。本示例项目将这两个框架进行了深度融合,为开发者提供了一个清晰的学习路径。 **SpringMVC框架** SpringMVC是Spring...
本文将深入探讨一个基于SpringMVC、Mybatis、Shiro和Redis的Web应用架构,这四个组件共同构成了一个强大而灵活的框架,能够满足复杂业务需求并提供高性能的数据处理和用户权限管理。 首先,SpringMVC作为Spring框架...
基于spring+springMvc+mybatis 开发的企业门户网站基于spring+springMvc+mybatis 开发的企业门户网站,适合具有一定编程基础,比如计算机专业的大学生或者1-3年工作经验的开发人员。手写简化版 Spring 框架,了解 ...
在线投票系统-jsp+springMVC+mybatis在线投票系统-jsp+springMVC+mybatis在线投票系统-jsp+springMVC+mybatis在线投票...jsp+springMVC+mybatis在线投票系统-jsp+springMVC+mybatis在线投票系统-jsp+springMVC+mybatis
标题中的“Spring+SpringMVC+Mybatis框架整合源码”指的是一个基于Java的Web开发项目,它结合了三个主流的开源框架:Spring、SpringMVC和Mybatis,以实现高效且灵活的企业级应用开发。这三种框架在Java世界中扮演着...
毕设项目:基于SpringMVC+MyBatis开发学生管理系统 毕设项目:基于SpringMVC+MyBatis开发学生管理系统 毕设项目:基于SpringMVC+MyBatis开发学生管理系统 毕设项目:基于SpringMVC+MyBatis开发学生管理系统 毕设项目...