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": "王娜"
}'测试成功 |