原文
JFinal中接收URL中的参数或者model中的参数是很方便的,但是对于web2.0的网站来说,经常会以json方式提交比较复杂的数据,比如一个查询,包含了各种过滤条件和排序分页,前端脚本可能提交的数据是这样的:
{ "type":1, "key":"keyword", "paging":{ "size":50, "index":0 }, "sort":{ "field":"time", "type":"desc" } }
像SpringMVC就提供了@RequestBody将数据绑定到json对象上,但是jFinal不支持,需要自己从POST中读取并解析这个json数据,先定义一个与请求同结构的Java对象,比如起名叫QueryRequest:
packagecom.demo; import com.demo.Paging; import com.demo.Sort; public class QueryRequest { private int type; private String key; private Paging paging; private Sort sort; public int getType() { return type; } public void setType(int type) { this.type = type; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public Paging getPaging() { return paging; } public void setPaging(Paging paging) { this.paging = paging; } public Sort getSort(){ return sort; } public void setSort(Sort sort){ this.sort = sort; } }
其中用到了Paging和Sort两个类:
package com.demo; public class Paging { private int size; private int index; public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
package com.demo; public class Sort { private String field; private String type; public String getField() { return field; } public void setField(String field) { this.field = field; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
然后在Controller里就从request中读取json字符串,然后调用fastjson解析提交的数据了,:
@Before(POST.class) public void getData(){ try{ //从requst中读取json字符串 StringBuilder json = new StringBuilder(); BufferedReader reader = this.getRequest().getReader(); String line = null; while((line = reader.readLine()) != null){ json.append(line); } reader.close(); //调用fastjson解析出对象 QueryRequest request = JSONObject.parseObject(json.toString(), QueryRequest.class); //然后就可以使用request得到请求的所有数据了 //下略 //....... } catch(Exception ex){ //异常处理,略 } renderText("测试"); }
转换部分会经常使用,可以提出来:
/** * 取Request中的数据对象 * @param valueType * @return * @throws Exception */ protected <T> T getRequestObject(Class<T> valueType) throws Exception { StringBuilder json = new StringBuilder(); BufferedReader reader = this.getRequest().getReader(); String line = null; while((line = reader.readLine()) != null){ json.append(line); } reader.close(); return JSONObject.parseObject(json.toString(), valueType); }
使用的时候一句就行了:
QueryRequest requst = getRequestObject(QueryRequest.class);
另外附上前端ajax调用的脚本:
$.ajax({ "url": "/home/getDate", //路径 "cache": false, //不缓存 "async": true, //异步 "type": "POST", //POST方式提交 "dataType": "json", //json格式,重要 "contentType": "application/json", //json格式 "data": {}, //要提交的数据对象 success: function (json) { //成功处理 }, error: function (x, e) { //异常处理 } });
PS:很喜欢jFinal,相比于SpringMVC庞大的体积,jFinal真是的很小巧。
相关推荐
在实际开发中,为了直接返回 JSON 数据给前端,我们需要使用一些 JSON 处理库,比如 Jackson 或 Gson。以下是如何修改 `UserController` 类来使用 `@ResponseBody` 注解来直接返回 JSON 数据: ```java import org....
这两个方法都接收一个Map对象作为参数,通过`RestDBConfigImpl`来执行实际的设置操作,并将结果转换成JSON字符串返回。 2. `DBCATEGORYController`:这个类处理数据库分类的获取。它提供了两个方法,一个用于获取...
1. 当Content-Type为application/json时,可以直接使用`@RequestBody`注解接收JSON数据。 2. 对于较旧的项目或特殊情况,可能需要手动读取流,例如通过HttpServletRequest的`getInputStream()`方法。 当需要在...
在控制器中,可以使用@ResponseBody注解返回JSON数据给前端。 ##### 3.4 如何解决POST请求中文乱码问题,GET的又如何处理呢? - **POST请求**:在web.xml中配置过滤器CharacterEncodingFilter来设置字符编码。 - **...
这个名为"springboot_sendSms.zip"的压缩包内容是关于如何在SpringBoot项目中集成阿里云短信服务,以便向手机发送验证码。这在验证用户身份、注册新用户或进行密码重置等场景中非常常见。 首先,我们需要了解阿里云...
在本文中,我们将深入探讨如何在SpringBoot应用中集成MQTT(Message Queuing Telemetry Transport)协议,实现设备上线和下线的提醒功能。MQTT是一种轻量级的发布/订阅消息传输协议,广泛用于物联网(IoT)场景,因为...
在此示例中,客户端发送的 JSON 数据将被自动转换成 `User` 对象。 ##### 3. `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, `@PatchMapping` 这些注解都是 `@RequestMapping` 的便捷版本,...
- **Controller层**:处理客户端请求,调用Service层的方法,并返回视图或JSON结果。 #### 七、Controller层代码 Controller层代码通常位于`src/main/java/com.example.demo/controller/`目录下。这些类负责接收...
在Spring MVC中,数据验证是确保输入数据符合预期格式和规则的重要步骤,这可以提高应用程序的安全性和用户体验。@Valid注解是Spring MVC提供的一种便捷的数据校验方式,它结合了JSR-303(Java Bean Validation)...
- **控制器(Controller)**: 负责接收用户请求,并将请求分发到相应的模型或视图上。 - **模型(Model)**: 包含应用程序的核心数据和业务逻辑。 - **视图(View)**: 显示模型数据,即用户界面。 Spring MVC 提供...
- **控制器(Controller)**:作为模型和视图之间的桥梁,接收用户请求并调用相应的服务层方法处理业务逻辑。 ##### 1.2 Dubbo Dubbo 是阿里巴巴开源的一款高性能、轻量级的微服务框架,它主要提供了三个核心能力:...
后台Spring MVC的Controller接收方式如下: ```java @ResponseBody @RequestMapping(value = "/box/changeLock") public String changeLock(@RequestParam final Long[] boxIds, final int boxType) { return ...
WebSocket是一种在客户端和服务器之间建立长连接的协议,它允许双方进行双向通信,即服务器可以主动向客户端推送数据。在Spring Boot框架中集成WebSocket,可以为实时应用提供强大的支持,如在线聊天、股票行情更新...
在本文中,我们将探讨如何使用Spring Boot来实现基于JWT(JSON Web Token)的OAuth2.0授权机制。JWT是一种轻量级的身份验证和授权机制,它允许我们在客户端和服务器之间安全地传递信息,而无需在每次请求时都发送...
变量是在程序中存储数据值的一种命名标识符。Java中的变量有局部变量、实例变量、静态变量等不同类型。 #### 操作/运算 (Operation) 操作或运算是指对数据进行处理的一系列步骤,例如算术运算、逻辑运算等。 #### ...
- 数据交互格式包括XML和JSON,JSON更轻量,易于解析,目前使用更为广泛。 28. XML解析方式: - XML解析方式包括DOM、SAX、Pull等,官方推荐使用Pull解析器。 29. 百度地图核心类和功能: - 百度地图SDK提供的...
- **XML vs JSON**:两种常用的数据交换格式,XML更适合结构化数据,JSON则更简洁、易于解析。 - **UML (Unified Modeling Language)**:统一建模语言,用于软件工程的设计和文档化。 - **设计模式**:解决常见问题...
14. **Spring Controller并发安全**:通过线程安全的设计原则,如避免在控制器中使用实例变量,使用`ThreadLocal`等方法确保控制器的线程安全。 #### 五、Netty框架 1. **BIO、NIO和AIO**:阻塞I/O(BIO)、非阻塞...
在这个例子中,`/greeting`路径将接收GET请求,`name`参数是可选的,如果没有提供,默认值为"World"。 在处理请求之后,我们需要响应数据。Spring Boot支持多种格式的响应,如JSON和XML。默认情况下,它使用Jackson...
在后端,我们需要创建一个Spring MVC的Controller方法来接收`base64`编码的图片数据,并将其保存为文件。这通常涉及将`base64`字符串解码为二进制数据,然后写入磁盘。注意,为了安全起见,你可能还需要验证和处理...