jfinal 5.0新增了me.setResolveJsonRequest(true);解析 json 请求,本分享是使用该参数的一个实践
源码地址
https://gitee.com/ppnt/java-ee-jfinal-study/tree/master/jfinal-5.0-study/jfinal-5.0.0-web-demo
添加依赖
pom.xml
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> </properties> <dependencies> <!-- jfinal --> <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>5.0.0</version> </dependency> <!-- jfinal-undertow 开发、部署一体化 web 服务器 --> <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal-undertow</artifactId> <version>3.0</version> </dependency> <!-- cos 文件上传 --> <dependency> <groupId>com.jfinal</groupId> <artifactId>cos</artifactId> <version>2022.2</version> </dependency> <!-- junit 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.68</version> </dependency> </dependencies>
配置类
package com.litongjava.jfinal.web.demo.config; import com.jfinal.config.Constants; import com.jfinal.config.Handlers; import com.jfinal.config.Interceptors; import com.jfinal.config.JFinalConfig; import com.jfinal.config.Plugins; import com.jfinal.config.Routes; import com.jfinal.kit.Prop; import com.jfinal.kit.PropKit; import com.jfinal.template.Engine; /** * 本 demo 仅表达最为粗浅的 jfinal 用法,更为有价值的实用的企业级用法 * 详见 JFinal 俱乐部: https://jfinal.com/club * * API 引导式配置 */ public class DemoConfig extends JFinalConfig { static Prop p; /** * PropKit.useFirstFound(...) 使用参数中从左到右最先被找到的配置文件 * 从左到右依次去找配置,找到则立即加载并立即返回,后续配置将被忽略 */ static void loadConfig() { if (p == null) { p = PropKit.useFirstFound("demo-config-pro.txt", "demo-config-dev.txt"); } } /** * 配置常量 */ public void configConstant(Constants me) { loadConfig(); me.setDevMode(p.getBoolean("devMode", false)); /** * 支持 Controller、Interceptor、Validator 之中使用 @Inject 注入业务层,并且自动实现 AOP * 注入动作支持任意深度并自动处理循环注入 */ me.setInjectDependency(true); // 配置对超类中的属性进行注入 me.setInjectSuperClass(true); // 开启解析 json 请求,5.0.0 版本新增功能 me.setResolveJsonRequest(true); } /** * 配置路由 */ public void configRoute(Routes me) { // 使用 jfinal 4.9.03 新增的路由扫描功能 me.scan("com.litongjava.jfinal.web.demo.controller."); } public void configEngine(Engine me) { } /** * 配置插件 */ public void configPlugin(Plugins me) { } /** * 配置全局拦截器 */ public void configInterceptor(Interceptors me) { } /** * 配置处理器 */ public void configHandler(Handlers me) { } }
启动类
package com.litongjava.jfinal.web.demo; import com.jfinal.server.undertow.UndertowServer; import com.litongjava.jfinal.web.demo.config.DemoConfig; /** * @author create by Ping E Lee on Oct 17, 2022 8:13:46 AM * */ public class WebDemoApp { /** * 启动入口,运行此 main 方法可以启动项目,此 main 方法可以放置在任意的 Class 类定义中,不一定要放于此 */ public static void main(String[] args) { UndertowServer.start(DemoConfig.class); } }
实体类
package com.litongjava.jfinal.web.model; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Builder public class User { private String username, password; }
controller
package com.litongjava.jfinal.web.demo.controller; import com.jfinal.core.Controller; import com.jfinal.core.Path; import com.litongjava.jfinal.web.model.User; import lombok.extern.slf4j.Slf4j; @Path("/") @Slf4j public class IndexController extends Controller { public void index() { log.info("ok"); renderText("ok"); } public void receiveUser(User user) { log.info("usre:{}", user); renderJson(user); } public void responseUser() { User user = User.builder().username("Ping").password("password").build(); renderJson(user); } }
请求
curl --location --request POST 'http://127.0.0.1/receiveUser' \ --header 'User-Agent: apifox/1.0.0 (https://www.apifox.cn)' \ --header 'Content-Type: application/json' \ --header 'Accept: */*' \ --header 'Host: 127.0.0.1' \ --header 'Connection: keep-alive' \ --data-raw '{ "password": "laboris Duis adipisicing est occaecat", "username": "王娜" }'
测试成功 |