JsonString 转 bean实体

本文介绍了一种将JSON字符串转换为Java对象的方法,利用了`net.sf.json`库的功能,并提供了两种不同场景下的实现方式:从`HttpServletRequest`请求中获取条件参数及直接使用`HashMap`作为输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.ttd.utiliy;


import java.util.HashMap;
import java.util.Map;


import javax.servlet.http.HttpServletRequest;


import net.sf.json.JSONObject;


@SuppressWarnings("unchecked")
public class JsonStringToObject {


public static <T> T jsonToObject(Class<T> pojoCalss, HttpServletRequest request) {
Map<String, Object> map = JSONObject.fromObject(request.getAttribute("condition"));
String jsonString = JSONObject.fromObject(map).toString();
try {
Object pojo;
net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(jsonString);
pojo = net.sf.json.JSONObject.toBean(json, pojoCalss);
return (T) pojo;
} catch (Exception ex) {
ex.printStackTrace();


return null;
}
}


public static <T> T jsonToObject(Class<T> pojoCalss, HashMap<String, Object> m) {


String jsonString = JSONObject.fromObject(m).toString();
try {
Object pojo;
net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(jsonString);
pojo = net.sf.json.JSONObject.toBean(json, pojoCalss);
return (T) pojo;
} catch (Exception ex) {
ex.printStackTrace();


return null;
}
}


}
### 将 MyBatis 中 JSON 数据换为 String 类型的方法 为了在 MyBatis 中处理 MySQL 的 JSON 字段并将其换为 `String` 类型,在 Java Bean 中可以利用自定义类型处理器来完成这一操作。具体来说,通过配置实体类中的字段使用特定的类型处理器,能够确保数据被正确序列化和反序列化。 对于需要保存或读取 JSON 格式的字段,可以在对应的属性上添加注解指定类型处理器: ```java @TableField(typeHandler = JsonToStringTypeHandler.class) private String jsonData; ``` 这里假设创建了一个名为 `JsonToStringTypeHandler` 的类作为自定义类型处理器用于处理从 JSON 到字符串以及相反方向的换过程[^2]。 #### 自定义 TypeHandler 实现 下面是一个简单的例子展示如何编写这样一个类型处理器: ```java import com.alibaba.fastjson.JSON; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JsonToStringTypeHandler extends BaseTypeHandler<String> { @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter); } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { return jsonConvert(rs.getString(columnName)); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return jsonConvert(rs.getString(columnIndex)); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return jsonConvert(cs.getString(columnIndex)); } private String jsonConvert(String jsonString){ // 可选:在此处加入逻辑以美化JSON字符串或其他预处理工作 return jsonString != null ? JSON.toJSONString(JSON.parse(jsonString)) : null; } } ``` 此代码片段展示了如何继承 `BaseTypeHandler<T>` 来构建适合需求的具体实现。在这个例子中,选择了 Fastjson 库来进行 JSON 解析与生成;当然也可以根据实际情况选用其他库如 Jackson 或 Gson 等替代方案[^1]。 当完成了上述设置后,每当应用程序访问带有该注解标记的字段时,MyBatis 都会自动调用所指明的类型处理器执行相应的换动作,从而实现了 JSON 和 String 之间的无缝切换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值