RESTKit is a powerful toolkit for restful services development

Overview

RESTKit

简体中文

RESTKit is a powerful toolkit for restful services development.

This plugin is committed to enhancing development efficiency with useful features. From the initial RestfulToolkit and joined common functions of Postman, rich and complete features can greatly improve the efficiency of IDEA development. Free to share with everyone, not for commercial purposes. If you find any problems, please give me feedback.

If this plugin helps, please 🌟 Star and Rating! If you have any good idea, please let me know.

Features

  • More supported jetbrains ides.
  • Restful service automatic scanning and display.
    • Support searching service in native Search Everywhere. ( use: Ctrl \ or Ctrl Alt N )
    • Show restful service structure in tool window.
    • Service and Method jump to each other.
  • Powerful HTTP client:
    • Custom parameter format, support placeholder variable, formatted JSON.
    • Environment variable:define/manage/use/export/import, support preset function and script function.
    • Global header:can use with Environment, also support preset function and script function.
    • Parameter library:support display/save/delete in Headers/Params/Body tab.
    • Request script:support pre-request and post-script script.
    • HTTP packet display.
  • Request log:save request log with HTTP packet format.
  • Plugin extension:through this, you can scan restful service in other framework.
  • Language & Framework:
    • Support api local store by default.
    • Support Spring MVC / SpringBoot with java and kotlin in idea by default.

Install

  • Using IDE plugin system

Recommended Preferences(Settings) > Plugins > Browse repositories... > find "RESTKit" > Install Plugin

  • Local Install

Download plugin form distributions/RESTKit-x.x.x.zip, then Preferences(Settings) > Plugins > Install Plugin from Disk...

Usage

RESTKit Tool Window

Open project, find and open RESTKit at right window. RESTKit is composed of four parts: toolbarservice treehttp client.

tool window

Toolbar

  • Refresh: refresh service list when updated.
  • Search: search service in search everywhere.
  • Filter: filter by HTTP method.
  • Scan library: whether scan with library.
  • Expand All.
  • Collapse All.
  • Setting:open setting view.
  • View document.

Service Tree

  • Display services by module.
  • Navigate to source when double-clicking in the service list.
  • Show context menu when right clicking.

HTTP Client

  • Environment: select the environment variable that has been added. preview current environment when hovering.
  • Method: http method, needn't select manually.
  • URL: http uri, needn't input manually. support placeholder, e.g. {{baseUrl}}.
  • Send: send http request one time after clicking.
  • Headers tab: request header, needn't input manually. support placeholder and parameter library.
  • Params tab: include query/path/form parameter, needn't input manually. support placeholder and parameter library.
  • Body tab: body for POST/PUT/PATCH/DELETE, needn't input manually.
  • Response tab: display response result. The content may be normal return, exception, or script return by the request script.
  • Info tab: display request with http packet format.

Search URL

  • Search everywhere: Double Shift or click search icon
    • When selecting item in search everywhere(URL tab), clicking Option or Alt helps to jump to service tree item.
    • Enable show this module name in configuration.
  • Service tree: support input search when focus on service tree.

search everywhere search everywhere

Common Setting

Provide some common settings for the plugin.

common setting.png

Where:

  • Preferences(Settings) > Other Settings > RESTKit
  • RESTKit tool window > toolbar > setting > Common Setting

Supported Web Framework

support Spring MVC and enabled by default. If you need support other framework restful apis, please see [RESTKit Extension](#Plugin Extension)

Request Config

  • Timeout: set request timeout. Never timeout when the value less than or equal 0.
  • Enable request log: default disabled. Log path $PROJECT_DIR$/.idea/restkit/logs/*.log.
  • Show module name in search everywhere
  • Enable parameter library: default enabled. Need reopen current project after setting.

Request Script

Set pre-request and post-request script path. If path is empty, you can double click Label before the input box to generate script like $PROJECT_DIR$/.idea/restkit/xxx-request Script.js.

Environment Variable

  • Environment variables indicate multi-set variables in advance, including Literal Variable, Direct reference variable, Built-in function variable and Script variable.
  • Can be used for URL, Headers, Params, Body, request script and etc.
  • Using placeholder to reference environment variables.
  • Each project has isolated config(project level).
  • Support import and export.

environment.png

Setting

  • Preferences(Settings) > Other Settings > RESTKit > Environment
  • RESTKit tool window > toolbar > setting > Environment Setting

Add

  1. Click Add button, input unique and brief name such as DEV, FAT, UAT, PRE, PRO.
  2. Add/delete/move key-values in current env group, be enabled when selected checkbox.
  3. When create a env group, it will create a default key-value baseUrl: http://localhost:8080 used for replacing {{baseUrl}} in URL input box.
  4. VALUE is string type, can use Built-in function variable and Script variable. See below for more.

env_add.png

Copy

Copy a new environment group from current. Click Copy button, input unique and brief name.

Delete

Delete current environment group and content. Click Delete button.

Export & Import

  1. Click Export button to export environment variables, environment script, global headers to clipboard as JSON format.
  2. Click Import button to import environment config from clipboard in another project. Imported environments will replace all current content.
  3. See Event Log tips when exception occurred.

KEY-VALUE Rules

KEY and VALUE are strings. VALUE supports reference variable such as:

  • Direct reference variable: reference to key-value of current group using {{KEY}}.
  • Built-in function variable: using {{$functionName}}. The default supplied variables are
    • {{$timestamp}}: current timestamp, ms.
    • {{$uuid}}: generate UUID randomly.
  • Script variable: click Script Variable button and edit content in dialog. Using {{$methodName$}}. Only Java language is supported, see rules in the comment, no third-party library supported.
public class RestKitScript {

    /**
     * Your script method, no param, method name must from {{$methodName$}}.
     * Use pre-request script can be more powerful.
     *
     * @return return value should be String
     */
    public static String methodName() {
        return "";
    }

}

Global Request Header

Configure request headers that add to the HTTP request by default in current project.

API Local Store

  • API Local Store used for manually saving API, an interface independently scanned. It's displayed as a Local module in Service Tree.
  • Every api should have unique key composed of url and method.
  • Enable by default. Disable in the setting.

Display

Add/Update

Click【Save Api】at any editor's right menu in the http client. There will be a tip when api existed.

Delete

Click in the right menu of local api item.

Export/Import

  • Export: click in the right menu of root/module/api.
  • Import: click in the right menu of root

Parameter Library

  • The parameter library is a repository for saving the request parameters such as Headers, Params, and Body.
  • Every parameter library binds to URL and method uniquely.
  • Two icon buttons for saving and selecting parameters in the tab editor. The List icon will show saved parameter number.

Save Parameter

Save current parameter for future use. Click Save icon and input unique name.

Select Parameter

Click List icon and show the parameter library that bound to URL and method.

  • Preview current selected parameters when the mouse hover.
  • When clicking left mouse button on list item, selected parameter will replace content in the editor.

Manage Parameter

Each parameter list item has a Setting icon, click to do more.

  • Replace: use current editor content to replace the item content.
  • Rename
  • Delete

Clear Parameter

Delete file at $PROJECT_DIR$/.idea/restkit/RESTKit_ParameterLibrary.xml.

Request Script

Before and after sending an HTTP request, you can control the request content by using script conveniently. Such as replacing token, encrypt request, etc.

Note
This feature relies on the Java Nashorn script engine, which is scheduled to be removed after JDK11, no replacement temporarily.

Set Script Path

Refer to this article: Common Setting > Request Script

Pre-request Script

  • Default generated pre-request script path: $PROJECT_DIR$/.idea/restkit/Pre-request Script.js

  • Instruction:

// You can use custom preset object request and environment, attributes are:
// request attributes
// url:         java.lang.String,               request url, can be modified by pre-request script.
// method:      java.lang.String,               request method, can be modified by pre-request script.
// headers:     java.util.Map
   
    ,  request headers, can be modified by pre-request script.
   
// params:      java.util.Map
   
    ,  request params, can be modified by pre-request script.
   
// body:        java.lang.String,               request body, can be modified by pre-request script.
//
// environment: java.util.Map
   
    ,  current environment, defined in the Environment setting, readonly.
   
//
// See more usages in nashorn-users-guide: https://docs.oracle.com/en/java/javase/12/nashorn/nashorn-users-guide.pdf
  • For example:
var env = environment;
var baseUrl = env.baseUrl;
var username = env['username'];

var req = request;
var url = req.url;
var method = req.method;
var headers = req.headers;
var params = req.params;
var body = req.body;

req.url = 'http://httpbin.org/ip';
req.method = 'GET';
req.headers = {
    'x-auth-ts': '' + new Date().valueOf(),
    'x-auth-traceid': '83b557cc-366a-4274-8912-078e71216c51',
};
req.headers['x-auth-token'] = '70309f2cc6a6462497f824e77baa77f9';
req.params = { code: 'ABCD' };
req.params.name = 'JavaNashorn';
req.body = JSON.stringify({ reqBody: 'Hello world!' });

Post-request Script

  • Default generated post-request script path: $PROJECT_DIR$/.idea/restkit/Post-request Script.js

  • Instruction:

// You can use custom preset object response and environment, attributes are:
// response attributes
// original:    org.apache.http.HttpResponse,   original http response, from http-client 4.4.
// body:        java.lang.String,               response body can be modified by post-request script.
//
// environment: java.util.Map
   
    ,  current environment, defined in the Environment setting, readonly.
   
//
// See more usages in nashorn-users-guide: https://docs.oracle.com/en/java/javase/12/nashorn/nashorn-users-guide.pdf
  • For example:
var env = environment;
var baseUrl = env.baseUrl;
var username = env['username'];

var resp = response;
var statusCode = resp.original.getStatusLine().getStatusCode();

if (statusCode != 200) {
    resp.body = JSON.stringify({ error: 'error occurred!' });
} else {
    resp.body = JSON.parse(resp.body).origin;
}

HTTP Request Process

Plugin Extension

RESTKit provided extension points from version 2.0.1. It's very useful.

  • io.github.newhoo.restkit.restful.ep.RestfulResolverProvider you can scan restful apis for other framework.
  • io.github.newhoo.restkit.restful.ep.LanguageResolverProvider operation for special language

For example:

  • plugin.xml
">
<idea-plugin>
    ...
    <depends>io.github.newhoo.restkitdepends>

    <extensions defaultExtensionNs="io.github.newhoo.restkit">
        
        <restfulResolver implementation="io.github.newhoo.restkit.feature.javaimpl.spring.SpringRequestResolver$SpringRequestResolverProvider"/>
        <languageResolver implementation="io.github.newhoo.restkit.feature.javaimpl.language.JavaLanguageResolver$JavaLanguageResolverProvider"/>
      
        <restfulResolver implementation="io.github.newhoo.restkit.ext.jaxrs.JaxrsResolverProvider"/>
    extensions>
idea-plugin>
  • RestfulResolverProvider instance
public class JaxrsResolverProvider implements RestfulResolverProvider {

    @Override
    public RequestResolver createRequestResolver(@NotNull Project project) {
        return project.getComponent(JaxrsResolver.class);
    }
}
  • LanguageResolverProvider instance
public class JavaLanguageResolver implements LanguageResolver {

  @NotNull
  @Override
  public Language getLanguage() {
    return JavaLanguage.INSTANCE;
  }
  
  ...

  public static class JavaLanguageResolverProvider implements LanguageResolverProvider {

    @NotNull
    @Override
    public LanguageResolver createLanguageResolver(@NotNull Project project) {
      return new JavaLanguageResolver();
    }
  }
}

For complete examples, please see source code and RESTKit-JAX-RS

Other Usages

Microservice Feature

Url navigate to service tree.

Java Method Navigate to Service Tree

Move mouse to restful method in java source, then click 💡 or press shortcut key .

Java Class Convert to JSON

After right-click on the java class name, select Convert to JSON in the context menu.

Copy as curl

Click【Copy as Curl】at any editor's right menu in the http client.

Contact & Feedback

Issues | Email | Ratings & Previews

Note
Please provide necessary information when you feedback: IDEA version, plugin version, exception content, recreation way(if can), desire, and etc.

Sponsor

If this plugin helps, you can take me a cup of coffee as you want. Thanks!

pay

Comments
  • Duplicate entries when annotations in interfaces

    Duplicate entries when annotations in interfaces

    We use interfaces and Implementations for controllers and interfaces annotated with Spring's annotations also are included on the Found Services list, causing duplicated entries. Maybe makes more sense to add only the ones implemented. Anyway, thanks for the great tool :D

    opened by romeucr 7
  • 2022.2版本搜索URLs异常

    2022.2版本搜索URLs异常

    环境: IntelliJ IDEA 2022.2 (Ultimate Edition) Build #IU-222.3345.118, built on July 26, 2022 Runtime version: 17.0.3+7-b469.32 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 10 10.0 GC: G1 Young Generation, G1 Old Generation Kotlin: 222-1.7.10-release-334-IJ3345.118

    场景: 打开RESTKit侧边栏,点击搜索时报错,报错日志如下:

    java.util.MissingResourceException: Registry key search.everywhere.group.contributors.by.type is not defined
    	at com.intellij.openapi.util.registry.Registry.getBundleValue(Registry.java:170)
    	at com.intellij.openapi.util.registry.RegistryValue._get(RegistryValue.java:233)
    	at com.intellij.openapi.util.registry.RegistryValue.get(RegistryValue.java:203)
    	at com.intellij.openapi.util.registry.RegistryValue.asBoolean(RegistryValue.java:62)
    	at com.intellij.openapi.util.registry.Registry.is(Registry.java:63)
    	at io.github.newhoo.restkit.navigation.RestSearchEverywhereAction.actionPerformed(RestSearchEverywhereAction.java:18)
    	at com.intellij.openapi.actionSystem.impl.ActionButton.actionPerformed(ActionButton.java:190)
    	at com.intellij.openapi.actionSystem.impl.ActionButton.lambda$performAction$0(ActionButton.java:166)
    	at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:337)
    	at com.intellij.openapi.actionSystem.impl.ActionButton.performAction(ActionButton.java:166)
    	at com.intellij.openapi.actionSystem.impl.ActionButton.processMouseEvent(ActionButton.java:465)
    	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)
    
    
    opened by xufanchn 5
  • Bug in HTTPS endpoint

    Bug in HTTPS endpoint

    There was an error accessing to URL: https://mysite.com/api/dealers?culture=en-AU&productCode=1234
    
    javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    
    opened by nkev 4
  • RESTKit在IDEA 2022.3版本报错,导致编辑器代码高亮渲染失败

    RESTKit在IDEA 2022.3版本报错,导致编辑器代码高亮渲染失败

    • IDEA版本:IntelliJ IDEA 2022.3 (Ultimate Edition)

    • RESTKit版本:2.1.1

    • 现象:代码高亮渲染失败,提示报错。

    • 错误日志:

    java.lang.AbstractMethodError: Receiver class io.github.newhoo.restkit.feature.microservice.OpenInHttpUrlInlayAction does not define or inherit an implementation of the resolved method 'abstract boolean isAvailable(com.intellij.psi.PsiFile, com.intellij.microservices.url.inlay.UrlPathInlayHint)' of interface com.intellij.microservices.url.inlay.UrlPathInlayAction.
    	at com.intellij.microservices.url.inlay.UrlPathInlayHintsProvider$getCollectorFor$1$collect$1.invoke(UrlPathInlayHintsProvider.kt:41)
    	at com.intellij.microservices.url.inlay.UrlPathInlayHintsProvider$getCollectorFor$1$collect$1.invoke(UrlPathInlayHintsProvider.kt:36)
    	at com.intellij.microservices.url.references.UrlPathContextKt.forbidExpensiveUrlContext(UrlPathContext.kt:224)
    	at com.intellij.microservices.url.inlay.UrlPathInlayHintsProvider$getCollectorFor$1.collect(UrlPathInlayHintsProvider.kt:36)
    	at com.intellij.codeInsight.hints.CollectorWithSettings.collectHints(InlayHintsUtils.kt:92)
    	at com.intellij.codeInsight.hints.InlayHintsPass.doCollectInformation$lambda-0(InlayHintsPass.kt:47)
    	at com.intellij.concurrency.ApplierCompleter.execAndForkSubTasks(ApplierCompleter.java:136)
    	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1086)
    	at com.intellij.concurrency.ApplierCompleter.lambda$wrapInReadActionAndIndicator$1(ApplierCompleter.java:92)
    	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:591)
    	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:666)
    	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:622)
    	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:590)
    	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
    	at com.intellij.concurrency.ApplierCompleter.wrapInReadActionAndIndicator(ApplierCompleter.java:104)
    	at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:86)
    	at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:754)
    	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
    	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
    	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
    	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
    	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
    
    bug 
    opened by xufanchn 2
  • 怎么扩展 languageResolver

    怎么扩展 languageResolver

    目前已通过 restfulResolver 实现了通过项目自定义注解生成 RestTree 的功能, 现在想实现代码跳转到 RestTree.

    虽然我参考 JavaLanguageResolver 实现了一个自定义的类, 重写了 canGenerateLineMarker(), 但是这个与特定语言有关, 在 io.github.newhoo.restkit.restful.LanguageHelper#canNavigateToTree 中如果是 Java 还是会调用 JavaLanguageResolver 而不会调用我自定义的类实现, 请问如何在不改动 RESTKit 代码的情况下实现我说的功能?

    下面是 plugin.xml 的配置:

    <extensions defaultExtensionNs="io.github.newhoo.restkit">
            <restfulResolver implementation="info.spark.idea.plugin.rest.ext.agent.AgentResolverProvider"/>
            <languageResolver implementation="info.spark.idea.plugin.rest.ext.agent.AgentServiceLanguageResolver$AgentLanguageResolverProvider"/>
    </extensions>
    
    opened by dong4j 2
  • PsiInvalidElementAccessException

    PsiInvalidElementAccessException

    com.intellij.psi.PsiInvalidElementAccessException: Element class com.intellij.psi.impl.source.tree.java.ModifierListElement of type MODIFIER_LIST (class com.intellij.psi.impl.java.stubs.JavaModifierListElementType) at com.intellij.psi.PsiInvalidElementAccessException.createByNode(PsiInvalidElementAccessException.java:80) at com.intellij.psi.impl.source.SubstrateRef$2.getContainingFile(SubstrateRef.java:101) at com.intellij.extapi.psi.StubBasedPsiElementBase.getContainingFile(StubBasedPsiElementBase.java:239) at com.intellij.extapi.psi.StubBasedPsiElementBase.getProject(StubBasedPsiElementBase.java:276) at com.intellij.psi.augment.PsiAugmentProvider.collectAugments(PsiAugmentProvider.java:133) at com.intellij.psi.impl.source.PsiModifierListImpl.getAnnotations(PsiModifierListImpl.java:294) at com.intellij.psi.impl.PsiImplUtil.findAnnotation(PsiImplUtil.java:289) at com.intellij.psi.impl.source.PsiModifierListImpl.findAnnotation(PsiModifierListImpl.java:311) at com.intellij.psi.PsiJvmConversionHelper.getListAnnotation(PsiJvmConversionHelper.java:53) at com.intellij.psi.PsiModifierListOwner.getAnnotation(PsiModifierListOwner.java:41) at com.intellij.psi.PsiJvmModifiersOwner.getAnnotation(PsiJvmModifiersOwner.java:27) at io.github.newhoo.restkit.feature.javaimpl.helper.PsiAnnotationHelper.getInheritedAnnotation(PsiAnnotationHelper.java:33) at io.github.newhoo.restkit.feature.javaimpl.spring.SpringAnnotationHelper.getTypeMethodPaths(SpringAnnotationHelper.java:27) at io.github.newhoo.restkit.feature.javaimpl.language.JavaLanguageResolver.tryGenerateRestItem(JavaLanguageResolver.java:84) at io.github.newhoo.restkit.restful.LanguageHelper.generateRestItem(LanguageHelper.java:61) at io.github.newhoo.restkit.feature.javaimpl.linemarker.MappingLineMarkerProvider.lambda$getLineMarkerInfo$1(MappingLineMarkerProvider.java:31) at io.github.newhoo.restkit.toolwindow.RestServiceTree.navigateToTree(RestServiceTree.java:150) at io.github.newhoo.restkit.toolwindow.RestServiceToolWindow.lambda$navigateToTree$1(RestServiceToolWindow.java:86) at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:215) at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:22) at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:197) at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:873) at com.intellij.openapi.application.impl.ApplicationImpl$3.run(ApplicationImpl.java:511) at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:69) at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:112) at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:42) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776) 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.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:898) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:746) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:439) at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:803) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:438) at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:106) 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:873) 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)

    wontfix 
    opened by 18856317221 2
  • 2022.1版本问题

    2022.1版本问题

    java.lang.Throwable: Assertion failed: expensive transformations shouldn't be called there at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:218) at com.intellij.microservices.url.references.UrlPathContext$applyOnResolve$1.invoke(UrlPathContext.kt:71) at com.intellij.microservices.url.references.UrlPathContext$applyOnResolve$1.invoke(UrlPathContext.kt:10) at com.intellij.microservices.url.references.LazyChain$chainLazy$1.invoke(LazyChain.kt:12) at com.intellij.microservices.url.references.LazyChain$Delayed$value$2.invoke(LazyChain.kt:19) at kotlin.SafePublicationLazyImpl.getValue(LazyJVM.kt:107) at com.intellij.microservices.url.references.LazyChain$Delayed.getValue(LazyChain.kt) at com.intellij.microservices.url.references.LazyChain$chainLazy$1.invoke(LazyChain.kt:12) at com.intellij.microservices.url.references.LazyChain$Delayed$value$2.invoke(LazyChain.kt:19) at kotlin.SafePublicationLazyImpl.getValue(LazyJVM.kt:107) at com.intellij.microservices.url.references.LazyChain$Delayed.getValue(LazyChain.kt) at com.intellij.microservices.url.references.LazyChain$chainLazy$1.invoke(LazyChain.kt:12) at com.intellij.microservices.url.references.LazyChain$Delayed$value$2.invoke(LazyChain.kt:19) at kotlin.SafePublicationLazyImpl.getValue(LazyJVM.kt:107) at com.intellij.microservices.url.references.LazyChain$Delayed.getValue(LazyChain.kt) at com.intellij.microservices.url.references.LazyChain$chainLazy$1.invoke(LazyChain.kt:12) at com.intellij.microservices.url.references.LazyChain$Delayed$value$2.invoke(LazyChain.kt:19) at kotlin.SafePublicationLazyImpl.getValue(LazyJVM.kt:107) at com.intellij.microservices.url.references.LazyChain$Delayed.getValue(LazyChain.kt) at com.intellij.microservices.url.references.UrlPathContext.getFullyEvaluated(UrlPathContext.kt:83) at com.intellij.microservices.url.references.UrlPathContext.getResolveRequests(UrlPathContext.kt:156) at io.github.newhoo.restkit.feature.microservice.OpenInHttpUrlInlayAction.isAvailable(OpenInHttpUrlInlayAction.java:70) at com.intellij.microservices.url.inlay.UrlPathInlayHintsProvider$getCollectorFor$1$collect$1.invoke(UrlPathInlayHintsProvider.kt:40) at com.intellij.microservices.url.inlay.UrlPathInlayHintsProvider$getCollectorFor$1$collect$1.invoke(UrlPathInlayHintsProvider.kt:33) at com.intellij.microservices.url.references.UrlPathContextKt.forbidExpensiveUrlContext(UrlPathContext.kt:219) at com.intellij.microservices.url.inlay.UrlPathInlayHintsProvider$getCollectorFor$1.collect(UrlPathInlayHintsProvider.kt:35) at com.intellij.codeInsight.hints.CollectorWithSettings.collectHints(InlayHintsUtils.kt:91) at com.intellij.codeInsight.hints.InlayHintsPass$doCollectInformation$1.process(InlayHintsPass.kt:47) at com.intellij.codeInsight.hints.InlayHintsPass$doCollectInformation$1.process(InlayHintsPass.kt:27) at com.intellij.concurrency.ApplierCompleter.execAndForkSubTasks(ApplierCompleter.java:136) at com.intellij.concurrency.ApplierCompleter.execAndForkSubTasks(ApplierCompleter.java:149) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1152) at com.intellij.concurrency.ApplierCompleter.lambda$wrapInReadActionAndIndicator$1(ApplierCompleter.java:92) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:608) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:683) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:639) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:607) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60) at com.intellij.concurrency.ApplierCompleter.wrapInReadActionAndIndicator(ApplierCompleter.java:104) at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:86) at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

    opened by Medivh-z 2
  • Bug in displaying returned JSON

    Bug in displaying returned JSON

    If the returned JSON looks like this:

    
    {"specs": "<dl id=\"specs\">\r\n\t<dt class=\"section\">Sound Generator</dt>"}
    
    

    The \" and \r\n\t are actually printed in the display like below, which breaks the JSON:

    
    {"specs": "<dl id="specs">
       <dt class="section">Sound Generator</dt>"}
    
    
    opened by nkev 1
  • Save API should prepopulate description text box

    Save API should prepopulate description text box

    Thank you for a great API client.

    When I click on "Save Api" (should be "Save API" by the way) and then I click on "Update" I have to remember what the previous description was and type it in again, which is inconvenient if I have lots of APIs that change.

    If the update description text box was pre-populated with the previous description, that would save time.

    Thank you!

    opened by nkev 1
  • 2022.3.1版本伴随报错

    2022.3.1版本伴随报错

    com.intellij.diagnostic.PluginException: 349 ms to call on EDT ShowDownloadFileAction#update@ContextToolbar (io.github.newhoo.restkit.toolwindow.action.editor.ShowDownloadFileAction). Revise AnAction.getActionUpdateThread property [Plugin: io.github.newhoo.restkit] at com.intellij.diagnostic.PluginProblemReporterImpl.createPluginExceptionByClass(PluginProblemReporterImpl.java:23) at com.intellij.diagnostic.PluginException.createByClass(PluginException.java:83) at com.intellij.openapi.actionSystem.impl.ActionUpdater.computeOnEdt(ActionUpdater.java:255) at com.intellij.openapi.actionSystem.impl.ActionUpdater.callAction(ActionUpdater.java:203) at com.intellij.openapi.actionSystem.impl.ActionUpdater.callAction(ActionUpdater.java:161) at com.intellij.openapi.actionSystem.impl.ActionUpdater.updateActionReal(ActionUpdater.java:137) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$new$0(ActionUpdater.java:124) at com.intellij.openapi.actionSystem.impl.ActionUpdater.update(ActionUpdater.java:705) at com.intellij.openapi.actionSystem.impl.ActionUpdater.expandGroupChild(ActionUpdater.java:556) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$doExpandActionGroup$23(ActionUpdater.java:529) at com.intellij.util.containers.ContainerUtil.concat(ContainerUtil.java:1406) at com.intellij.openapi.actionSystem.impl.ActionUpdater.doExpandActionGroup(ActionUpdater.java:529) at com.intellij.openapi.actionSystem.impl.ActionUpdater.expandActionGroup(ActionUpdater.java:309) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$doExpandActionGroupAsync$14(ActionUpdater.java:377) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$doExpandActionGroupAsync$15(ActionUpdater.java:396) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1086) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$tryRunReadActionAndCancelBeforeWrite$19(ActionUpdater.java:428) at com.intellij.openapi.progress.util.ProgressIndicatorUtilService.runActionAndCancelBeforeWrite(ProgressIndicatorUtilService.java:63) at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:128) at com.intellij.openapi.actionSystem.impl.ActionUpdater.tryRunReadActionAndCancelBeforeWrite(ActionUpdater.java:424) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$doExpandActionGroupAsync$16(ActionUpdater.java:396) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:190) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:591) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:666) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:622) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:590) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:177) at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:365) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$doExpandActionGroupAsync$17(ActionUpdater.java:395) at io.opentelemetry.context.Context.lambda$wrap$1(Context.java:212) at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:243) at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:29) at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:216) at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:212) at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:205) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699) at java.base/java.lang.Thread.run(Thread.java:833) Suppressed: java.lang.Throwable: EDT-trace-unknown

    opened by dujie-js 1
Releases(2.0.9)
Owner
Mr.Hu
我亦无他,唯手熟尔
Mr.Hu
crnk.io - Crank up the development of RESTful applications

crnk.io - Crank up the development of RESTful applications! release on jcenter latest in private repository What is Crnk? Crnk is an implementation of

null 272 Nov 28, 2022
Java Web Toolkit

What is JWt ? JWt is a Java library for developing web applications. It provides a pure Java component-driven approach to building web applications, a

null 48 Jul 16, 2022
Lean & powerful HTTP apps

What is Ratpack? Ratpack is a simple, capable, toolkit for creating high performance web applications. Ratpack is built on Java and the Netty event-dr

Ratpack 1.9k Jan 8, 2023
Firefly is an asynchronous web framework for rapid development of high-performance web application.

What is Firefly? Firefly framework is an asynchronous Java web framework. It helps you create a web application Easy and Quickly. It provides asynchro

Alvin Qiu 289 Dec 18, 2022
A web MVC action-based framework, on top of CDI, for fast and maintainable Java development.

A web MVC action-based framework, on top of CDI, for fast and maintainable Java development. Downloading For a quick start, you can use this snippet i

Caelum 347 Nov 15, 2022
CUBA Platform is a high level framework for enterprise applications development

Java RAD framework for enterprise web applications Website | Online Demo | Documentation | Guides | Forum CUBA Platform is a high level framework for

CUBA Platform 1.3k Jan 1, 2023
Development Driven Testing (DDT) lets you generate unit tests from a running application. Reproduce a bug, generate a properly mocked test

DDTJ: It kills bugs DDT is the flip side of TDD (Test-driven development). It stands for "Development Driven Tests". Notice that it doesn’t contradict

null 4 Dec 30, 2021
RESTEasy is a JBoss project that provides various frameworks to help you build RESTful Web Services and RESTful Java applications

RESTEasy RESTEasy is a JBoss.org project aimed at providing productivity frameworks for developing client and server RESTful applications and services

RESTEasy 1k Dec 23, 2022
An powerful enhanced toolkit of MyBatis for simplify development

Born To Simplify Development 企业版 Mybatis-Mate 高级特性 What is MyBatis-Plus? MyBatis-Plus is an powerful enhanced toolkit of MyBatis for simplify developm

baomidou 13.9k Jan 10, 2023
A damn simple library for building production-ready RESTful web services.

Dropwizard Dropwizard is a sneaky way of making fast Java web applications. It's a little bit of opinionated glue code which bangs together a set of l

Dropwizard 8.3k Jan 5, 2023
Cucumber DSL for testing RESTful Web Services

cukes-rest takes simplicity of Cucumber and provides bindings for HTTP specification. As a sugar on top, cukes-rest adds steps for storing and using r

C.T.Co 100 Oct 18, 2022
Spring Boot, Hibernate, JpaRepository, RESTful services & PostgreSQL.

HRMS-Project Human Resources Management System Back End application with Java, Spring Boot, Hibernate, JpaRepository, RESTful services & PostgreSQL. S

Hikmet Tutuncu 9 Aug 23, 2022
Easy-Es is a powerfully enhanced toolkit of RestHighLevelClient for simplify development

Easy-Es is a powerfully enhanced toolkit of RestHighLevelClient for simplify development. This toolkit provides some efficient, useful, out-of-the-box features for ElasticSearch. By using Easy-Es, you can use MySQL syntax to complete Es queries. Use it can effectively save your development time.

dromara 772 Dec 31, 2022
crnk.io - Crank up the development of RESTful applications

crnk.io - Crank up the development of RESTful applications! release on jcenter latest in private repository What is Crnk? Crnk is an implementation of

null 272 Nov 28, 2022
Discord4J is a fast, powerful, unopinionated, reactive library to enable quick and easy development of Discord bots for Java, Kotlin, and other JVM languages using the official Discord Bot API.

Discord4J is a fast, powerful, unopinionated, reactive library to enable quick and easy development of Discord bots for Java, Kotlin, and other JVM languages using the official Discord Bot API.

null 1.5k Jan 4, 2023
Java bytecode engineering toolkit

Java bytecode engineering toolkit Javassist version 3 Copyright (C) 1999-2020 by Shigeru Chiba, All rights reserved. Javassist (JAVA programming ASSIS

null 3.7k Dec 29, 2022
Speedment is a Stream ORM Java Toolkit and Runtime

Java Stream ORM Speedment is an open source Java Stream ORM toolkit and runtime. The toolkit analyzes the metadata of an existing SQL database and aut

Speedment 2k Dec 21, 2022
Java Web Toolkit

What is JWt ? JWt is a Java library for developing web applications. It provides a pure Java component-driven approach to building web applications, a

null 48 Jul 16, 2022
The Mines Java Toolkit

The Mines Java Toolkit The Mines Java Toolkit (Mines JTK) is a set of Java packages and native (non-Java) software libraries for science and engineeri

Mines Java Toolkit 57 Nov 19, 2022