上周帮同事看一个问题,是想构造一个万能的query对象,这个对象里面包含一个泛型的对象,在spring mvc的controller层想通过RequestBody直接进行转换,spring mvc的代码如下:
@RequestMapping("/testBind") @ResponseBody public String testBind(@RequestBody MgQueryCondition<TestBean> queryCondition){ System.out.println(queryCondition); return "success"; }
import java.io.Serializable; public class TestBean implements Serializable{ private Integer id; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Override public String toString() { return "TestBean [id=" + id + "]"; } }
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; public class MgQueryCondition<T> { private T model; private Integer pageNo; private Integer pageNum; public T getModel() { return model; } public void setModel(T model) { this.model = model; } public Integer getPageNo() { return pageNo; } public void setPageNo(Integer pageNo) { this.pageNo = pageNo; } public Integer getPageNum() { return pageNum; } public void setPageNum(Integer pageNum) { this.pageNum = pageNum; } @Override public String toString() { return "MgQueryCondition [model=" + model + ", pageNo=" + pageNo + ", pageNum=" + pageNum + "]"; } }
假设我们去调试的话,发现MgQueryCondition里面的数据类型是JSONObject,如果如果在调用getModel的时候就会发生类型转换问题,后来我看了下fastjson的文档。
针对泛型类型,使用TypeReference进行解析,代码如下:
public static void main(String[] args) { MgQueryCondition<TestBean> test = new MgQueryCondition<TestBean>(); TestBean testBean = new TestBean(); testBean.setId(1); test.setModel(testBean); test.setPageNo(1); test.setPageNum(1); System.out.println(JSONObject.toJSONString(test)); String json = "{\"model\":{\"id\":1},\"pageNo\":1,\"pageNum\":1}"; MgQueryCondition<TestBean> clazz = JSON.parseObject(json, new TypeReference<MgQueryCondition<TestBean>>(){}); System.out.println(clazz.getModel().getClass()); }
这样我们就无法使用@RequestBody了,所以应该使用最基本的kv结构的进行传参。
相关推荐
然而,在处理复杂对象关系时,尤其是在对象之间存在循环引用的情况下,FastJson在序列化过程中可能会遇到问题。 循环引用问题是指在对象之间形成闭环的引用关系,即一个对象直接或间接地引用了自身。在Java中,这...
6. **错误处理**:在实际应用中,还需要考虑 JSON 数据格式错误或对象转换异常的情况,可以使用异常处理器来捕获并处理这些问题。 7. **平台-springmvc-webapp**:这个名字可能指的是项目中的一个模块或目录,可能...
3. 使用Fastjson:在Controller层的处理方法中,使用Fastjson进行对象到JSON的转换,如`JSON.toJSONString(obj)`和`JSON.parseObject(jsonStr, Class)`。 4. 集成Swagger:在SpringMVC配置中添加Swagger的相关配置...
Fastjson 是阿里巴巴开源的一个高性能的JSON库,它...然而,需要注意的是,虽然Fastjson在性能上表现出色,但在安全方面存在一些潜在问题,因此在生产环境中使用时,建议定期关注Fastjson的安全更新,确保其安全性。
在SpringMVC框架中,处理接收多个对象的情况是常见的需求,尤其在处理多条数据的批量操作时。本文将详细讲解四种不同的方法来接收并处理多个对象,以满足后端控制器从前端表单获取多名乘客信息的需求。 1. **表单...
然后,在`springmvc-servlet.xml`配置文件中,我们需要声明视图解析器和消息转换器。添加以下内容: ```xml <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"> ...
SpringMVC 配合 Fastjson 的内存马利用与分析 SpringMVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架,即使 用了 MVC 架构模式的思想,将 web 层进 行职责解耦,基于请求驱动指的...
本文将详细介绍如何在SpringMVC中后台转换JSON格式,以解决406错误问题。 406错误通常发生在客户端发送了Accept头,表明它期望接收某种特定类型的数据,但服务器无法提供这种类型的数据。在Ajax请求中,这个Accept...
4. **对象转换为XML**:在`getXmlResponse()`方法中,创建一个User对象,然后使用XStream将其转换为XML字符串。 ```java User user = new User(); // 初始化user对象... String xmlResponse = xstream.toXML...
开发工具采用IDEA,用maven构建的项目,框架采用SpringMVC,数据库采用mysql与mybatis配合,数据格式采用阿里巴巴工具fastJson,数据源druid,另外还添加了resteasy中的功能
- **反序列化**:在接收JSON数据时,使用FastJson的`JSON.parseObject()`或`JSON.parseArray()`方法将JSON字符串转换为Java对象。例如: ```java @RequestMapping(value = "/users", method = RequestMethod.POST...
Jackson库的强大功能不仅限于基本的对象转换,还包括处理日期时间、泛型、枚举、自定义类型等复杂场景,以及支持JSON Schema、流式处理等高级特性。 总结来说,`jackson-core-asl.jar`和`Jackson-mapper-asl.jar`在...
.SpringMVC关于json、xml自动转换的原理研究.pdf
.SpringMVC关于json、xml自动转换的原理研究.docx
在SpringMVC中,数据绑定和数据类型转换是两个关键的概念,它们对于构建高效、健壮的Web应用至关重要。 **数据绑定**是SpringMVC中的一种机制,允许我们将用户通过表单或其他方式提交的请求参数自动绑定到控制器中...
在SpringMVC框架中,开发人员经常需要处理对象实例的传递和返回,这涉及到模型绑定、数据转换和服务层之间的交互。本示例将探讨如何在SpringMVC中有效地完成这一任务,并结合zTree这一前端组件展示如何进行数据交互...
在SpringMVC中,Fastjson常用于将Java对象转换为JSON格式的响应数据,提供给前端使用。它的性能优异,且使用简单,极大地提高了开发效率。 4. **Druid连接池** Druid是阿里巴巴开源的数据库连接池组件,它不仅提供...