jetplugins / apidocx Goto Github PK
View Code? Open in Web Editor NEWGenerate API documents to any place: YApi, RAP2, Eolink, etc.
Home Page: https://plugins.jetbrains.com/plugin/17425-apidocx/
License: Apache License 2.0
Generate API documents to any place: YApi, RAP2, Eolink, etc.
Home Page: https://plugins.jetbrains.com/plugin/17425-apidocx/
License: Apache License 2.0
public static boolean isNeedField(PsiField field) {
PsiModifierList modifierList = field.getModifierList();
if (modifierList == null || !modifierList.hasExplicitModifier(PsiModifier.STATIC)) {
return true;
}
return false;
}
public interface TestInterface{
Map<String,Integer> FIELD_MAPPINGS = Map.of("1",2,"3",4);
}
见标题
/**
* 根据id查询工单详情
*
* @param id 任务Id
* @return 数据详情
*/
@GetMapping("/{id:\\d+}")
public ApiResult getInfo(@PathVariable String id) {
io.yapix.base.sdk.yapi.YapiException: path第一位必需为 /, 只允许由 字母数字-/_:.! 组成 at
io.yapix.base.sdk.yapi.YapiClient.doHandleResponse(YapiClient.java:227) at
io.yapix.base.sdk.yapi.AbstractClient.execute(AbstractClient.java:99) at
io.yapix.base.sdk.yapi.AbstractClient.doRequest(AbstractClient.java:55) at
io.yapix.base.sdk.yapi.YapiClient.requestPost(YapiClient.java:186) at
io.yapix.base.sdk.yapi.YapiClient.saveInterface(YapiClient.java:136) at
io.yapix.process.yapi.process.YapiUploader.addOrUpdate(YapiUploader.java:97) at
io.yapix.process.yapi.process.YapiUploader.upload(YapiUploader.java:33) at
io.yapix.process.yapi.YapiUploadAction.lambda$handle$0(YapiUploadAction.java:63) at
io.yapix.action.AbstractAction$1.lambda$run$0(AbstractAction.java:235) at
java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at
java.base/java.lang.Thread.run(Thread.java:829)
private String getBodySnippets(String title, Property property) {
if (property == null) {
return "";
}
StringBuilder markdown = new StringBuilder();
markdown.append(format("*%s:*", title)).append("\n\n");
markdown.append("| 名称 | 必选 | 类型 | 默认值 | 描述 |").append("\n");
markdown.append("| - | - | - | - | - |").append("\n");
if (property.isObjectType()) {
// property#properties npe error, 建议optional包装处理.
property.getProperties().values().forEach(p -> markdown.append(propertyRowSnippets(p, 1)));
} else {
markdown.append(propertyRowSnippets(property, 1));
}
return markdown.toString();
}
支持集合类型枚举自动添加注解, 例如: List
支持枚举类型指定字段值: @see ColorEnum.color
貌似是vf文件存在缓存导致
您好,
idea 版本IntelliJ IDEA 2022.2.3
idea yapi插件 Easy Yapi Tangcent 2.4.7.191.0
错误信息
......is too complex. Blocked by elements reached 1417
Editor editor = event.getDataContext().getData(CommonDataKeys.EDITOR);
VirtualFile file = event.getDataContext().getData(CommonDataKeys.VIRTUAL_FILE);
// 当选中非java文件, 但未打开编辑器时, yapix正常回显.
if (editor != null && file != null && !"java".equals(file.getExtension())) {
visible = false;
}
IDEA版本:2022.2
推送到RAP2报错
Config file error: Failed making field 'java.util.regex.Pattern#pattern' accessible; either change its visibility or write a custom TypeAdapter for its declaring type
应当先解析父类字段,再解析字类,从而实现覆盖
由于是微服务项目,每个微服务在网关都有定义自己的前缀,现在生成的url无法带前缀
yapiUrl=http://xxx.com/
yapiProjectId=99
yapiProjectToken=xxxxxx
这还缺什么吗
为了代码简洁,通常springboot项目都会实现org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<T>
这个类去做统一响应处理。例如:
/**
* 统一响应结果
*/
@Data
public class Result<T> implements Serializable {
private static final long serialVersionUID = 8925927757015090232L;
/** 响应编码 */
private String code;
/** 响应消息 */
private String msg;
/** 响应数据 */
private T data;
}
/**
* 统一处理响应结果
* 处理后,不需要在Controller层的每个接口返回结果再包一层Result<T>
*/
@Slf4j
@RestControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) {
if (body instanceof Result) {
return body;
}
return Result.success(body);
}
}
/**
* 测试实体类
*/
@Data
public class TestDTO implements Serializable {
private static final long serialVersionUID = -5026639589154791246L;
/**
* 名称
* */
private String name;
/**
* 性别
*/
private String gender;
}
@Slf4j
@Validated
@RestController
@RequestMapping("test")
public class TestController {
/**
* 测试接口
* @return 结果对象
*/
@GetMapping
public TestDTO test(){
TestDTO entity = new TestDTO();
entity.setGender("男");
return entity;
}
}
经过统一处理,接口test()最终返回结果如下:
{
"code": "00000",
"msg": "成功",
"data": {
"name": "名称",
"gender": "男"
}
}
理论上对应的接口文档响应结果字段应该是这样的:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
code | string | 非必须 | 响应编码 | |
msg | string | 非必须 | 响应消息 | |
data | object | 非必须 | 响应数据 | 备注: 响应数据 |
name | string | 非必须 | 名称 | |
gender | string | 非必须 | 性别 |
但是实际只生成了如下文档:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
name | string | 非必须 | 名称 | |
gender | string | 非必须 | 性别 |
因此建议插件增加一个结果类型(Result)配置开关,如果开启并配置了这个Result类,当扫描接口返回结果类型时,如果类型是Result类,则直接生成文档;如果不是,则包上这一层Result类,再生成接口文档。 这样,才不会生成错误的接口文档。
目前同一个controller推送两次,就创建了两次不会去重,希望可以新增接口推送策略,支持覆盖更新等操作
插件版本:0.9.2
错误提示信息:Yapi X: The current class must declare category
源代码如下:
@RestController
@RequestMapping("/v1/auth")
@ShenyuSpringMvcClient(path = "/v1/auth/**")
public class SynergyAuthController {
private final SynergyAuthService authService;
@Autowired
public SynergyAuthController(SynergyAuthService authService) {
this.authService = authService;
}
/**
* 切换租户
*
* @param param 选择的租户
* @return 状态
*/
@PostMapping("/group/switchover")
public Result<AuthGroupSwitchoverVO> groupSwitchover(@RequestBody @Valid AuthGroupSwitchoverParam param) {
return Result.success(authService.groupSwitchover(param));
}
/**
* 扫码验证
*
* @param param 验证状态
* @return 状态
*/
@PostMapping("/valid/make")
public Result<AuthValidMakeVO> validMake(@RequestBody @Valid AuthValidMakeParam param) {
return Result.success(authService.validMake(param));
}
}
如果您或者您所在的公司正在使用该插件,请让我们知道留下您的评论,收集仅用于宣传。
参考格式:
公司名称:您所在的公司或你的github链接
API平台:YApi/Rap2/Eolinker/ShowDoc/Markdown
原API管理方式: swagger/手动录入等
使用插件导入到yapi中后,请求参数那一块,示例这一栏取得是代码中 @RequestParam 注解中defaultValue属性对应的值,但是如果defaultValue为空,示例就不会显示内容了,如果要写示例值就只能写在注释那里了,有什么其他方法来实现吗?
思路:
@RestController
@RequestMapping(value = "/index")
public class DemoController {
/**
* 测试接口
* @return
*/
@RequestMapping(value = "/demo", method = RequestMethod.POST)
public String hotMap() {
return "demo";
}
}
类似上边的Demo,upload to yapi 异常:
java.lang.NullPointerException
at io.yapix.model.HttpMethod.of(HttpMethod.java:21)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at io.yapix.parse.parser.PathParser.parseRequestMappingAnnotation(PathParser.java:89)
at io.yapix.parse.parser.PathParser.parse(PathParser.java:41)
at io.yapix.parse.ApiParser.parseMethod(ApiParser.java:144)
at io.yapix.parse.ApiParser.parse(ApiParser.java:61)
at io.yapix.action.AbstractAction.parse(AbstractAction.java:118)
at io.yapix.action.AbstractAction.actionPerformed(AbstractAction.java:90)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:280)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:296)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:281)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:77)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:285)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:112)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:517)
at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:36)
at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:539)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6650)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
at java.desktop/java.awt.Component.processEvent(Component.java:6415)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5025)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4857)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4857)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:974)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:912)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:844)
at com.intellij.ide.IdeEventQueue.lambda$null$8(IdeEventQueue.java:449)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:741)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:448)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:831)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:502)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
目前使用网页抓包的接口,如果下次还存在接口变动,那么尝试用官方的openapi来实现上传
目的:反向推动规范接口文档标准化
设计:
存在以下场景, 返参类型是JobDTO
.
其字段content
接口响应结果为向下转型后的派生类对象.
因此接口文档中关于content@object
的描述需要涵盖NormalJobContentDTO/WorkflowJobContentDTO
内的所有字段.
public class JobDTO {
/**
* 任务实例内容
* [note]返回对象为向下转型后的派生类
*/
private JobContentDTO content;
}
/**
* @see NormalJobContentDTO
* @see WorkflowJobContentDTO
*/
public interface JobContentDTO {
}
public class NormalJobContentDTO implements JobContentDTO {
/**
* 任务实例#field0
*/
private Integer field0;
}
public class WorkflowJobContentDTO implements JobContentDTO {
/**
* 工作流实例#子任务DAG
*/
private String dags;
}
试了一下不支持 Kotlin 项目
类上@RequestMapping注解没有method的值,在调用HttpMethod的of方法时会抛出空指针。需要在.map(HttpMethod::of)前面过滤空字符串
请问下作者有否考虑该情况如何处理
由于使用了eolinker非开放接口变更,导致上传失败或异常
场景: 微服务中多个子项目接口,上传到yapi中单个项目中,此时无法使用yapi平台项目的统一前缀配置
如题, 集成MeterSphere接口平台.
cc @lkqm
作者好
目前业务上,可能会对@controller(@RestController)在进一步包装
举个例子 定义一个@ValidController的注解 它是 @Valid 和 @controller 的组合注解
例如
@Validated
@RestController
public @interface ValidController {
@AliasFor(annotation = Controller.class) String value() default "";
}
这时候 对于加上了这个注解的Controller类 yapix会认为他不是合法的controller 因此不进行接口的上传
想问一下可否加入对这种场景的支持呢
谢谢
建议[返回数据]文档中能支持下Map泛型的文档展示,例如至少能展示类型是Map
idea 2020就可以
idea 2022.2报错如下
com.google.gson.JsonIOException: Failed making field 'java.util.regex.Pattern#pattern' accessible; either change its visibility or write a custom TypeAdapter for its declaring type
at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:22)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:158)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:165)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.Gson.fromJson(Gson.java:990)
at com.google.gson.Gson.fromJson(Gson.java:956)
at com.google.gson.Gson.fromJson(Gson.java:905)
at io.yapix.config.YapixConfig.fromProperties(YapixConfig.java:151)
at io.yapix.config.YapixConfig.getMergedInternalConfig(YapixConfig.java:161)
at io.yapix.action.AbstractAction.resolveConfig(AbstractAction.java:195)
at io.yapix.action.AbstractAction.actionPerformed(AbstractAction.java:80)
at com.intellij.openapi.actionSystem.ex.ActionUtil.doPerformActionOrShowPopup(ActionUtil.java:315)
at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performActionDumbAwareWithCallbacks$4(ActionUtil.java:294)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:337)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:294)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$performAction$4(ActionMenuItem.java:293)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:224)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.performAction(ActionMenuItem.java:286)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$new$0(ActionMenuItem.java:67)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$3(ActionMenuItem.java:109)
at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:109)
at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:546)
at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:578)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6648)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3392)
at java.desktop/java.awt.Component.processEvent(Component.java:6413)
at java.desktop/java.awt.Container.processEvent(Container.java:2266)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5022)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2802)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:781)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:730)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:724)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:754)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:752)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:751)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:898)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:820)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:743)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:439)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:791)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:438)
at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:113)
at com.intellij.ide.IdeEventQueue.performActivity(IdeEventQueue.java:604)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:436)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:881)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:484)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private java.lang.String java.util.regex.Pattern.pattern accessible: module java.base does not "opens java.util.regex" to unnamed module @c9347be
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:19)
... 72 more
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.