diff --git a/README.md b/README.md index 0229288..caf7c50 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ ![](./src/main/resources/static/redame/img_20.png) -### 5. sql 工具 +### 5. 代码 工具 #### 5.1 mybatis 代码生成 @@ -144,7 +144,14 @@ ![](./src/main/resources/static/redame/img_37.png) ![](./src/main/resources/static/redame/img_36.png) +#### 5.3 json 转 java bean +> 参考文章: https://blog.csdn.net/weixin_39651356/article/details/127155659 + +![](./src/main/resources/static/redame/img_43.png) +![](./src/main/resources/static/redame/img_44.png) +![](./src/main/resources/static/redame/img_45.png) +![](./src/main/resources/static/redame/img_46.png) ### 6. 网络工具 diff --git a/pom.xml b/pom.xml index 136bd91..c22c0cd 100644 --- a/pom.xml +++ b/pom.xml @@ -356,6 +356,27 @@ 4.92-p13 + + org.jsonschema2pojo + jsonschema2pojo-core + 1.2.1 + + + + io.springfox + springfox-swagger2 + ${swagger.version} + + + io.springfox + springfox-bean-validators + ${swagger.version} + + + io.springfox + springfox-swagger-ui + ${swagger.version} + diff --git a/src/main/java/com/zhangmeng/tools/controller/HomeController.java b/src/main/java/com/zhangmeng/tools/controller/HomeController.java index 1a40c0e..a45b274 100644 --- a/src/main/java/com/zhangmeng/tools/controller/HomeController.java +++ b/src/main/java/com/zhangmeng/tools/controller/HomeController.java @@ -500,4 +500,8 @@ public class HomeController implements Serializable { public void pdf_menu_item(ActionEvent event) { load_small_tools(13); } + + public void json_javabean_gen_menu_item(ActionEvent event) { + load_sql_tools(2); + } } \ No newline at end of file diff --git a/src/main/java/com/zhangmeng/tools/controller/Json2PoJoController.java b/src/main/java/com/zhangmeng/tools/controller/Json2PoJoController.java new file mode 100644 index 0000000..eb4ab0a --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/controller/Json2PoJoController.java @@ -0,0 +1,176 @@ +package com.zhangmeng.tools.controller; + +import cn.hutool.core.lang.Console; +import com.zhangmeng.tools.json2Pojo.AnnotateConfig; +import com.zhangmeng.tools.json2Pojo.Json2PojoCodeGeneratorConfig; +import com.zhangmeng.tools.json2Pojo.Json2PojoCodeGeneratorUtil; +import com.zhangmeng.tools.utils.AlertUtils; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.util.StringConverter; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 10:01 + */ +public class Json2PoJoController { + + @FXML + public ComboBox lombook_enable; + + @FXML + public ComboBox mybatis_plus_enable; + + @FXML + public ComboBox swagger_enable; + + @FXML + public Button convert; + + public static int index = 1; + + @FXML + public TextField class_name; + + @FXML + public TextField package_name; + + @FXML + public TextArea json_content; + + @FXML + public TextArea result_show; + + @FXML + public void initialize() { + + ObservableList lombook_enable_list = FXCollections.observableArrayList(); + lombook_enable_list.add(new EnableBean("开启",true)); + lombook_enable_list.add(new EnableBean("关闭",false)); + lombook_enable.setItems(lombook_enable_list); + lombook_enable.getSelectionModel().select(index); + lombook_enable.setConverter(new StringConverter() { + @Override + public String toString(EnableBean object) { + + if (object != null){ + return object.title; + } + + return null; + } + + @Override + public EnableBean fromString(String string) { + return null; + } + }); + + ObservableList mybatis_plus_enable_list = FXCollections.observableArrayList(); + mybatis_plus_enable_list.add(new EnableBean("开启",true)); + mybatis_plus_enable_list.add(new EnableBean("关闭",false)); + mybatis_plus_enable.setItems(mybatis_plus_enable_list); + mybatis_plus_enable.getSelectionModel().select(index); + mybatis_plus_enable.setConverter(new StringConverter() { + @Override + public String toString(EnableBean object) { + + if (object != null){ + return object.title; + } + + return null; + } + + @Override + public EnableBean fromString(String string) { + return null; + } + }); + + ObservableList swagger_enable_list = FXCollections.observableArrayList(); + swagger_enable_list.add(new EnableBean("开启",true)); + swagger_enable_list.add(new EnableBean("关闭",false)); + swagger_enable.setItems(swagger_enable_list); + swagger_enable.getSelectionModel().select(index); + + swagger_enable.setConverter(new StringConverter<>() { + @Override + public String toString(EnableBean object) { + + if (object != null) { + return object.title; + } + + return null; + } + + @Override + public EnableBean fromString(String string) { + return null; + } + }); + + convert.setOnAction(event -> { + + if (class_name.getText().length() == 0){ + AlertUtils.alert_warning("类名不能为空!"); + return; + } + if (package_name.getText().length() == 0){ + AlertUtils.alert_warning("包名不能为空!"); + return; + } + + if (json_content.getText().length() == 0){ + AlertUtils.alert_warning("json内容不能为空!"); + return; + } + + String pojoCode = Json2PojoCodeGeneratorUtil.json2pojo( + Json2PojoCodeGeneratorConfig.builder() + .pojoClassName(class_name.getText()) + .pojoPackageName(package_name.getText()) + .jsonContent(json_content.getText()).build(), + AnnotateConfig.builder() + .mybatis_plus_enable(mybatis_plus_enable.getSelectionModel().getSelectedItem().isEnable()) + .swagger_enable(swagger_enable.getSelectionModel().getSelectedItem().isEnable()) + .lombook_enable(lombook_enable.getSelectionModel().getSelectedItem().isEnable()).build() + ); + result_show.setText(pojoCode); + }); + + } + + public static class EnableBean { + private String title;//开启关闭 + private boolean isEnable; + + public EnableBean(String title, boolean isEnable) { + this.title = title; + this.isEnable = isEnable; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean isEnable() { + return isEnable; + } + + public void setEnable(boolean enable) { + isEnable = enable; + } + } +} diff --git a/src/main/java/com/zhangmeng/tools/controller/SSHConnectionController.java b/src/main/java/com/zhangmeng/tools/controller/SSHConnectionController.java index 0cc991a..1d15454 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SSHConnectionController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SSHConnectionController.java @@ -152,7 +152,7 @@ public class SSHConnectionController { webSocketServer.stop(); Thread.sleep(100); isConnection = false; - } catch (IOException | InterruptedException e) { + } catch (InterruptedException e) { e.printStackTrace(); } } diff --git a/src/main/java/com/zhangmeng/tools/controller/SocketServerController.java b/src/main/java/com/zhangmeng/tools/controller/SocketServerController.java index 632ce9b..375f596 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SocketServerController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SocketServerController.java @@ -60,7 +60,7 @@ public class SocketServerController { if (isStart){ try { webSocketServer.stop(); - } catch (IOException | InterruptedException e) { + } catch (InterruptedException e) { e.printStackTrace(); } } @@ -73,7 +73,7 @@ public class SocketServerController { webSocketServer.stop(); isStart = false; server_status.setText("服务已经停止!端口:" + port.getText()); - } catch (IOException | InterruptedException e) { + } catch (InterruptedException e) { e.printStackTrace(); } } diff --git a/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java b/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java index 7fc5665..3f3197b 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java @@ -64,8 +64,8 @@ public class SqlToolsController { private SimpleDoubleProperty height = new SimpleDoubleProperty(0.0); private AnchorPane root; private AnchorPane mysql_code_gen; - private AnchorPane spring_security; private AnchorPane mybatis_plus_gen; + private AnchorPane json2JavaBean; public static final String color_cell = "#f4f4f4"; @@ -75,16 +75,6 @@ public class SqlToolsController { @FXML private SplitPane splitPane; - @FXML - public void md5_menu_item() { - - } - - @FXML - public void spring_security_menu_item() { - - } - @FXML public void video_menu_item() { load_player(0); @@ -222,6 +212,13 @@ public class SqlToolsController { } mybatis_plus_gen(flag); } + + if (newValue.getIndex() == 2) { + if (json2JavaBean != null){ + flag = true; + } + json2JavaBean(flag); + } } }); } @@ -230,6 +227,7 @@ public class SqlToolsController { return switch (player){ case MySql_Code_Generate -> new Image(ImagePath.path(ImagePath.ImagePathType.MD5)); case MyBatis_plus_Generate -> new Image(ImagePath.path(ImagePath.ImagePathType.MD5)); + case Json_To_JavaBean -> new Image(ImagePath.path(ImagePath.ImagePathType.MD5)); }; } @@ -304,6 +302,24 @@ public class SqlToolsController { common_method(); } + //json 转javabean + private void json2JavaBean(boolean flag){ + //默认选择第一个 + listView.getSelectionModel().select(2); + + if (!flag){ + try { + root = FXMLLoader.load(ResourcesUtils.getResource("json2pojo")); + } catch (IOException e) { + e.printStackTrace(); + } + json2JavaBean = root; + }else { + root = json2JavaBean; + } + common_method(); + } + private void mybatis_plus_gen(boolean flag){ //默认选择第一个 listView.getSelectionModel().select(1); @@ -473,4 +489,21 @@ public class SqlToolsController { public void maven_jar_install_menu_item(ActionEvent event) { load_small_tools(10); } + + public void json_javabean_gen_menu_item(ActionEvent event) { + boolean flag= false; + + if (json2JavaBean != null){ + flag = true; + } + json2JavaBean(flag); + } + + public void md5_menu_item(ActionEvent event) { + load_codec_tools(0); + } + + public void spring_security_menu_item(ActionEvent event) { + load_codec_tools(1); + } } diff --git a/src/main/java/com/zhangmeng/tools/json2Pojo/AnnotateConfig.java b/src/main/java/com/zhangmeng/tools/json2Pojo/AnnotateConfig.java new file mode 100644 index 0000000..c29bb5c --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/json2Pojo/AnnotateConfig.java @@ -0,0 +1,30 @@ +package com.zhangmeng.tools.json2Pojo; + +import com.zhangmeng.tools.controller.Json2PoJoController; +import javafx.fxml.FXML; +import javafx.scene.control.ComboBox; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 11:38 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class AnnotateConfig { + + private boolean lombook_enable; + + private boolean mybatis_plus_enable; + + private boolean swagger_enable; + + private boolean jackson_enable; + +} diff --git a/src/main/java/com/zhangmeng/tools/json2Pojo/GenerateCodeTypeEnum.java b/src/main/java/com/zhangmeng/tools/json2Pojo/GenerateCodeTypeEnum.java new file mode 100644 index 0000000..a152a88 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/json2Pojo/GenerateCodeTypeEnum.java @@ -0,0 +1,10 @@ +package com.zhangmeng.tools.json2Pojo; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 09:26 + */ +public enum GenerateCodeTypeEnum { + JSON2POJO +} diff --git a/src/main/java/com/zhangmeng/tools/json2Pojo/Json2PojoCodeGeneratorConfig.java b/src/main/java/com/zhangmeng/tools/json2Pojo/Json2PojoCodeGeneratorConfig.java new file mode 100644 index 0000000..faf49d1 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/json2Pojo/Json2PojoCodeGeneratorConfig.java @@ -0,0 +1,38 @@ +package com.zhangmeng.tools.json2Pojo; + +import cn.hutool.core.util.URLUtil; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 09:18 + * + * 源代码链接地址: https://blog.csdn.net/weixin_39651356/article/details/127155659 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Json2PojoCodeGeneratorConfig { + + /** + * 用于解析成Bean的json内容 + */ + String jsonContent; + + /** + * 结果Bean的类名 + * 不设置则为【TestBean】 + */ + String pojoClassName; + + /** + * 结果Bean的包名 + * 不设置则使用工具类默认包名 + */ + String pojoPackageName; +} diff --git a/src/main/java/com/zhangmeng/tools/json2Pojo/Json2PojoCodeGeneratorUtil.java b/src/main/java/com/zhangmeng/tools/json2Pojo/Json2PojoCodeGeneratorUtil.java new file mode 100644 index 0000000..351c2dd --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/json2Pojo/Json2PojoCodeGeneratorUtil.java @@ -0,0 +1,82 @@ +package com.zhangmeng.tools.json2Pojo; + +import cn.hutool.core.util.ClassUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.sun.codemodel.JCodeModel; +import lombok.SneakyThrows; +import org.jsonschema2pojo.SchemaMapper; +import org.springframework.util.Assert; + +import java.io.ByteArrayOutputStream; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 09:22 + * * 源代码链接地址: https://blog.csdn.net/weixin_39651356/article/details/127155659 + */ +public class Json2PojoCodeGeneratorUtil{ + + @SneakyThrows + public static String json2pojo(String jsonContent) { + return json2pojo(jsonContent, "TestBean", ClassUtil.getPackage(Json2PojoCodeGeneratorUtil.class), + AnnotateConfig.builder() + .mybatis_plus_enable(true) + .swagger_enable(true) + .lombook_enable(true) + .jackson_enable(true) + .build() + ); + } + + /** + * json内容转成Bean代码 + * @param jsonContent json内容 + * @param pojoClassName 生成的Bean的Class名字 + * @param pojoPackageName 生成的Bean的包名字 + * @return + */ + @SneakyThrows + public static String json2pojo(String jsonContent, String pojoClassName, String pojoPackageName,AnnotateConfig annotateConfig) { + return json2pojo(Json2PojoCodeGeneratorConfig.builder() + .jsonContent(jsonContent) + .pojoClassName(pojoClassName) + .pojoPackageName(pojoPackageName) + .build(),annotateConfig); + } + + + + /** + * json内容转成Bean代码 + * @param json2PojoGenerateConfig 配置信息 + * @return + */ + @SneakyThrows + public static String json2pojo(Json2PojoCodeGeneratorConfig json2PojoGenerateConfig,AnnotateConfig annotateConfig) { + String jsonContent = json2PojoGenerateConfig.getJsonContent(); + Assert.isTrue(JSONUtil.isTypeJSON(jsonContent), "非JSON内容,请检查"); + String pojoClassName = StrUtil.blankToDefault(json2PojoGenerateConfig.getPojoClassName(), "TestBean"); + String pojoPackageName = StrUtil.blankToDefault(json2PojoGenerateConfig.getPojoPackageName(), ClassUtil.getPackage(Json2PojoCodeGeneratorUtil.class)); + + //1. 生成配置设置 + SchemaMapper mapper = MyJsonschema2pojoConfig.getDefaultSchemaMapper(annotateConfig); + JCodeModel codeModel = new JCodeModel(); + mapper.generate(codeModel, pojoClassName, pojoPackageName, jsonContent); + + //2. 开始生成代码 + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + MyCodeWriter myCodeWriter = new MyCodeWriter(byteArrayOutputStream); + codeModel.build(myCodeWriter); + + //3. 获取结果 + String result = new String(byteArrayOutputStream.toByteArray()); + + return StrUtil.trim(result); + } + + public String generate(Json2PojoCodeGeneratorConfig generatorConfig,AnnotateConfig annotateConfig) { + return json2pojo(generatorConfig,annotateConfig); + } +} diff --git a/src/main/java/com/zhangmeng/tools/json2Pojo/MyAbstractTypeInfoAwareAnnotator.java b/src/main/java/com/zhangmeng/tools/json2Pojo/MyAbstractTypeInfoAwareAnnotator.java new file mode 100644 index 0000000..578bdf1 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/json2Pojo/MyAbstractTypeInfoAwareAnnotator.java @@ -0,0 +1,99 @@ +package com.zhangmeng.tools.json2Pojo; + +import cn.hutool.core.lang.func.LambdaUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.JsonNode; +import com.sun.codemodel.JDefinedClass; +import com.sun.codemodel.JFieldVar; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import lombok.experimental.Accessors; +import org.jsonschema2pojo.AbstractTypeInfoAwareAnnotator; +import org.jsonschema2pojo.GenerationConfig; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 09:29 + * + * * 源代码链接地址: https://blog.csdn.net/weixin_39651356/article/details/127155659 + */ +@Setter +@Getter +public class MyAbstractTypeInfoAwareAnnotator extends AbstractTypeInfoAwareAnnotator { + + /** + * 是否开启使用lombok注解 + */ + boolean lombokAnnotFlag = true; + + /** + * 是否开启使用swagger注解 + */ + boolean swaggerAnnotFlag = true; + + /** + * 是否开启使用mybatisplus注解 + */ + boolean mybatisPlusAnnotFlag = true; + + + /** + * 是否开启使用jackson注解 + */ + boolean jacksonAnnotFlag = false; + + + public MyAbstractTypeInfoAwareAnnotator(GenerationConfig generationConfig) { + super(generationConfig); + } + + @Override + protected void addJsonTypeInfoAnnotation(JDefinedClass clazz, String propertyName) { + } + + /** + * 类上的注解 + */ + @Override + public void propertyInclusion(JDefinedClass clazz, JsonNode schema) { + if (lombokAnnotFlag) { + clazz.annotate(Data.class); + clazz.annotate(ToString.class).param(LambdaUtil.getMethodName(ToString::callSuper), true); + clazz.annotate(Builder.class); + clazz.annotate(NoArgsConstructor.class); + clazz.annotate(AllArgsConstructor.class); + clazz.annotate(Accessors.class).param(LambdaUtil.getMethodName(Accessors::chain), true); + } + if (mybatisPlusAnnotFlag) { + clazz.annotate(TableName.class).param(LambdaUtil.getMethodName(TableName::value), StrUtil.toUnderlineCase(clazz.name())); + } + if (swaggerAnnotFlag) { + clazz.annotate(ApiModel.class).param(LambdaUtil.getMethodName(ApiModel::description), clazz.name()); + } + + } + + + /** + * 属性字段上的注解 + */ + @Override + public void propertyField(JFieldVar field, JDefinedClass clazz, String propertyName, JsonNode propertyNode) { + if (mybatisPlusAnnotFlag) { + field.annotate(TableField.class).param("value", StrUtil.toUnderlineCase(propertyName)); + } + if (swaggerAnnotFlag) { + field.annotate(ApiModelProperty.class).param("value", propertyName); + } + if (jacksonAnnotFlag) { + field.annotate(JsonProperty.class).param("value", propertyName); + } + } +} + + diff --git a/src/main/java/com/zhangmeng/tools/json2Pojo/MyCodeWriter.java b/src/main/java/com/zhangmeng/tools/json2Pojo/MyCodeWriter.java new file mode 100644 index 0000000..265f602 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/json2Pojo/MyCodeWriter.java @@ -0,0 +1,46 @@ +package com.zhangmeng.tools.json2Pojo; + +import com.sun.codemodel.CodeWriter; +import com.sun.codemodel.JPackage; + +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 09:21 + * + * * 源代码链接地址: https://blog.csdn.net/weixin_39651356/article/details/127155659 + */ +public class MyCodeWriter extends CodeWriter { + + + private final PrintStream out; + + /** + * @param os + * This stream will be closed at the end of the code generation. + */ + public MyCodeWriter( OutputStream os ) { + this.out = new PrintStream(os);; + } + + @Override + public OutputStream openBinary(JPackage pkg, String fileName) throws IOException { + String pkgName = pkg.name(); + if(pkgName.length()!=0) pkgName += '.'; + return new FilterOutputStream(out) { + public void close() { + // don't let this stream close + } + }; + } + + @Override + public void close() throws IOException { + out.close(); + } +} \ No newline at end of file diff --git a/src/main/java/com/zhangmeng/tools/json2Pojo/MyJsonschema2pojoConfig.java b/src/main/java/com/zhangmeng/tools/json2Pojo/MyJsonschema2pojoConfig.java new file mode 100644 index 0000000..f47f48e --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/json2Pojo/MyJsonschema2pojoConfig.java @@ -0,0 +1,130 @@ +package com.zhangmeng.tools.json2Pojo; + +import org.jsonschema2pojo.*; +import org.jsonschema2pojo.rules.RuleFactory; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 09:20 + * + * * 源代码链接地址: https://blog.csdn.net/weixin_39651356/article/details/127155659 + */ +public class MyJsonschema2pojoConfig { + + /** + * 总体配置 + * @param includeGetAndSetFlag 是否需要get\set代码 + * @return + */ + public static GenerationConfig getGenerationConfig(boolean includeGetAndSetFlag) { + return new DefaultGenerationConfig() { + + @Override + public boolean isIncludeAllPropertiesConstructor() { + return false; + } + + /** + * 使用json内容进行构建javaBean + * @return + */ + @Override + public SourceType getSourceType() { + return SourceType.JSON; + } + + @Override + public boolean isGenerateBuilders() { // set config option by overriding method + return false; + } + + @Override + public AnnotationStyle getAnnotationStyle() { + return AnnotationStyle.NONE; + } + + + @Override + public boolean isIncludeAdditionalProperties() { + return false; + } + + @Override + public boolean isIncludeGetters() { + return includeGetAndSetFlag; + } + @Override + public boolean isIncludeSetters() { + return includeGetAndSetFlag; + } + @Override + public boolean isIncludeToString() { + return false; + } + + + + @Override + public boolean isSerializable() { + return true; + } + + @Override + public boolean isIncludeGeneratedAnnotation() { + return false; + } + + @Override + public boolean isIncludeHashcodeAndEquals() { + return false; + } + + @Override + public String getTargetVersion() { + return "1.8"; + } + + @Override + public InclusionLevel getInclusionLevel() { + return InclusionLevel.ALWAYS; + } + }; + } + + public static GenerationConfig getGenerationConfig() { + return getGenerationConfig(false); + } + + /** + * 生成的注解配置 + * @param generationConfig + * @return + */ + public static MyAbstractTypeInfoAwareAnnotator getAnnotator(GenerationConfig generationConfig) { + return new MyAbstractTypeInfoAwareAnnotator(generationConfig); + } + + + /** + * 自定义总体配置+注解配置 + * @return + */ + public static SchemaMapper getSchemaMapper(GenerationConfig config, MyAbstractTypeInfoAwareAnnotator myAbstractTypeInfoAwareAn) { + return new SchemaMapper(new RuleFactory(config, myAbstractTypeInfoAwareAn, new SchemaStore()), new SchemaGenerator()); + } + + /** + * 默认总体配置+注解配置 + * @return + */ + public static SchemaMapper getDefaultSchemaMapper(AnnotateConfig annotateConfig) { + GenerationConfig generationConfig = getGenerationConfig(); + MyAbstractTypeInfoAwareAnnotator annotator = getAnnotator(generationConfig); + annotator.setLombokAnnotFlag(annotateConfig.isLombook_enable()); + annotator.setSwaggerAnnotFlag(annotateConfig.isSwagger_enable()); + annotator.setMybatisPlusAnnotFlag(annotateConfig.isMybatis_plus_enable()); + annotator.setJacksonAnnotFlag(annotateConfig.isJackson_enable()); + return getSchemaMapper(generationConfig,annotator); + } +} diff --git a/src/main/java/com/zhangmeng/tools/json2Pojo/TestUtils.java b/src/main/java/com/zhangmeng/tools/json2Pojo/TestUtils.java new file mode 100644 index 0000000..8111bbf --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/json2Pojo/TestUtils.java @@ -0,0 +1,198 @@ +package com.zhangmeng.tools.json2Pojo; + +import cn.hutool.core.lang.Console; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 09:44 + */ +public class TestUtils { + + public static void main(String[] args) { + t(); + } + + public static void t(){ + + String json = "[{\n" + + " \"title\": \"当日销售状况\",\n" + + " \"childs\": [{\n" + + " \"title\": \"堂食业务\",\n" + + " \"childs\": [{\n" + + " \"title\": \"折前销售额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"优惠金额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"折后销售额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"堂食动销费\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"收款手续费\",\n" + + " \"value\": \"9999.00\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"title\": \"会员储值\",\n" + + " \"childs\": [{\n" + + " \"title\": \"储值金额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"赠送金额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"赠券金额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"收款手续费\",\n" + + " \"value\": \"9999.00\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"title\": \"预售业务\",\n" + + " \"childs\": [{\n" + + " \"title\": \"预售订单数\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"销售额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"预售动销费\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"技术服务费\",\n" + + " \"value\": \"9999.00\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"title\": \"团购业务\",\n" + + " \"childs\": [{\n" + + " \"title\": \"团购订单数\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"销售额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"团购动销费\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"技术服务费\",\n" + + " \"value\": \"9999.00\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"title\": \"外卖业务\",\n" + + " \"childs\": [{\n" + + " \"title\": \"外卖订单数\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"折前销售额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"优惠金额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"折后销售额\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"外卖动销费\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"技术服务费\",\n" + + " \"value\": \"9999.00\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + "}, {\n" + + " \"title\": \"当日用餐状况\",\n" + + " \"childs\": [{\n" + + " \"title\": \"\",\n" + + " \"childs\": [{\n" + + " \"title\": \"就餐人数\",\n" + + " \"value\": \"999\"\n" + + " },\n" + + " {\n" + + " \"title\": \"人均消费\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"就餐桌数\",\n" + + " \"value\": \"99\"\n" + + " },\n" + + " {\n" + + " \"title\": \"桌均消费\",\n" + + " \"value\": \"9999.00\"\n" + + " }\n" + + " ]\n" + + " }]\n" + + "}, {\n" + + " \"title\": \"当日推广专用账户支出\",\n" + + " \"childs\": [{\n" + + " \"title\": \"\",\n" + + " \"childs\": [{\n" + + " \"title\": \"堂食动销费\",\n" + + " \"value\": \"999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"促推活动奖金\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"代言奖金\",\n" + + " \"value\": \"9999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"推销奖金\",\n" + + " \"value\": \"9999.00\"\n" + + " }\n" + + " ]\n" + + " }]\n" + + "}, {\n" + + " \"title\": \"当日账户余额\",\n" + + " \"childs\": [{\n" + + " \"title\": \"\",\n" + + " \"childs\": [{\n" + + " \"title\": \"系统结算账户余额\",\n" + + " \"value\": \"999.00\"\n" + + " },\n" + + " {\n" + + " \"title\": \"推广专用账户余额\",\n" + + " \"value\": \"9999.00\"\n" + + " }\n" + + " ]\n" + + " }]\n" + + "}]"; + + // String pojoCode = Json2PojoCodeGeneratorUtil.json2pojo(json,"Test", "work.linruchang.lrcutilsweb.consts"); +// Console.log(pojoCode); + } + + +} diff --git a/src/main/java/com/zhangmeng/tools/utils/Code2pojo.java b/src/main/java/com/zhangmeng/tools/utils/Code2pojo.java new file mode 100644 index 0000000..deb2fbb --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/utils/Code2pojo.java @@ -0,0 +1,38 @@ +package com.zhangmeng.tools.utils; + +import com.sun.codemodel.JCodeModel; +import org.jsonschema2pojo.*; +import org.jsonschema2pojo.rules.RuleFactory; + +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-21 09:06 + */ +public class Code2pojo { + + public void t() throws IOException { + JCodeModel codeModel = new JCodeModel(); + + URL source = Code2pojo.class.getResource("/schema/required.json"); + + GenerationConfig config = new DefaultGenerationConfig() { + @Override + public boolean isGenerateBuilders() { // set config option by overriding method + return true; + } + }; + + SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator()); + mapper.generate(codeModel, "ClassName", "com.example", source); + + codeModel.build(Files.createTempDirectory("required").toFile()); + } + + + +} diff --git a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java index ddc2675..c4592c1 100644 --- a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java +++ b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java @@ -188,6 +188,7 @@ public class ResourcesUtils { MySql_Code_Generate("mysql 代码生成",0), MyBatis_plus_Generate("mybatis-plus 代码生成",1), + Json_To_JavaBean("json转javabean 代码生成",2), ; SqlTools(String title, int index) { diff --git a/src/main/resources/fxml/home.fxml b/src/main/resources/fxml/home.fxml index f6e8f20..dd6902a 100644 --- a/src/main/resources/fxml/home.fxml +++ b/src/main/resources/fxml/home.fxml @@ -56,10 +56,11 @@ - + + diff --git a/src/main/resources/fxml/json2pojo.fxml b/src/main/resources/fxml/json2pojo.fxml new file mode 100644 index 0000000..247a367 --- /dev/null +++ b/src/main/resources/fxml/json2pojo.fxml @@ -0,0 +1,28 @@ + + + + + + + + + + + + +