Commit e46c19f3 by Nepxion

增加多种异步接口

parent 709158c9
...@@ -133,28 +133,52 @@ public class ConsoleEndpoint { ...@@ -133,28 +133,52 @@ public class ConsoleEndpoint {
return executeConfigUpdate(serviceId, config, false); return executeConfigUpdate(serviceId, config, false);
} }
@RequestMapping(path = "/config/clear/{serviceId}", method = RequestMethod.POST) @RequestMapping(path = "/config/clear-async/{serviceId}", method = RequestMethod.POST)
@ApiOperation(value = "批量清除更新的规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "POST") @ApiOperation(value = "批量异步清除更新的规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> configClear(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId) { public ResponseEntity<?> configClearAsync(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId) {
return executeConfigClear(serviceId); return executeConfigClear(serviceId, true);
} }
@RequestMapping(path = "/version/update/{serviceId}", method = RequestMethod.POST) @RequestMapping(path = "/config/clear-sync/{serviceId}", method = RequestMethod.POST)
@ApiOperation(value = "批量更新服务的动态版本", notes = "根据指定的localVersion更新服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接更新服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST") @ApiOperation(value = "批量同步清除更新的规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> versionUpdate(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId, @RequestBody @ApiParam(value = "版本号,格式为[dynamicVersion]或者[dynamicVersion];[localVersion]", required = true) String version) { public ResponseEntity<?> configClearSync(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId) {
return executeVersionUpdate(serviceId, version); return executeConfigClear(serviceId, false);
} }
@RequestMapping(path = "/version/clear/{serviceId}", method = RequestMethod.POST) @RequestMapping(path = "/version/update-async/{serviceId}", method = RequestMethod.POST)
@ApiOperation(value = "批量清除服务的动态版本", notes = "根据指定的localVersion清除服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接清除服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST") @ApiOperation(value = "批量异步更新服务的动态版本", notes = "根据指定的localVersion更新服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接更新服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> versionClear(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId, @RequestBody(required = false) @ApiParam(value = "版本号,指localVersion,可以为空") String version) { public ResponseEntity<?> versionUpdateAsync(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId, @RequestBody @ApiParam(value = "版本号,格式为[dynamicVersion]或者[dynamicVersion];[localVersion]", required = true) String version) {
return executeVersionClear(serviceId, version); return executeVersionUpdate(serviceId, version, true);
}
@RequestMapping(path = "/version/update-sync/{serviceId}", method = RequestMethod.POST)
@ApiOperation(value = "批量同步更新服务的动态版本", notes = "根据指定的localVersion更新服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接更新服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> versionUpdateSync(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId, @RequestBody @ApiParam(value = "版本号,格式为[dynamicVersion]或者[dynamicVersion];[localVersion]", required = true) String version) {
return executeVersionUpdate(serviceId, version, false);
}
@RequestMapping(path = "/version/clear-async/{serviceId}", method = RequestMethod.POST)
@ApiOperation(value = "批量异步清除服务的动态版本", notes = "根据指定的localVersion清除服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接清除服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> versionClearAsync(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId, @RequestBody(required = false) @ApiParam(value = "版本号,指localVersion,可以为空") String version) {
return executeVersionClear(serviceId, version, true);
}
@RequestMapping(path = "/version/clear-sync/{serviceId}", method = RequestMethod.POST)
@ApiOperation(value = "批量同步清除服务的动态版本", notes = "根据指定的localVersion清除服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接清除服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> versionClearSync(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId, @RequestBody(required = false) @ApiParam(value = "版本号,指localVersion,可以为空") String version) {
return executeVersionClear(serviceId, version, false);
} }
public List<String> getServices() { public List<String> getServices() {
...@@ -255,26 +279,26 @@ public class ConsoleEndpoint { ...@@ -255,26 +279,26 @@ public class ConsoleEndpoint {
return configUpdateRestInvoker.invoke(); return configUpdateRestInvoker.invoke();
} }
private ResponseEntity<?> executeConfigClear(String serviceId) { private ResponseEntity<?> executeConfigClear(String serviceId, boolean async) {
List<ServiceInstance> serviceInstances = getInstances(serviceId); List<ServiceInstance> serviceInstances = getInstances(serviceId);
ConfigClearRestInvoker configClearRestInvoker = new ConfigClearRestInvoker(serviceInstances, consoleRestTemplate); ConfigClearRestInvoker configClearRestInvoker = new ConfigClearRestInvoker(serviceInstances, consoleRestTemplate, async);
return configClearRestInvoker.invoke(); return configClearRestInvoker.invoke();
} }
private ResponseEntity<?> executeVersionUpdate(String serviceId, String version) { private ResponseEntity<?> executeVersionUpdate(String serviceId, String version, boolean async) {
List<ServiceInstance> serviceInstances = getInstances(serviceId); List<ServiceInstance> serviceInstances = getInstances(serviceId);
VersionUpdateRestInvoker versionUpdateRestInvoker = new VersionUpdateRestInvoker(serviceInstances, consoleRestTemplate, version); VersionUpdateRestInvoker versionUpdateRestInvoker = new VersionUpdateRestInvoker(serviceInstances, consoleRestTemplate, version, async);
return versionUpdateRestInvoker.invoke(); return versionUpdateRestInvoker.invoke();
} }
private ResponseEntity<?> executeVersionClear(String serviceId, String version) { private ResponseEntity<?> executeVersionClear(String serviceId, String version, boolean async) {
List<ServiceInstance> serviceInstances = getInstances(serviceId); List<ServiceInstance> serviceInstances = getInstances(serviceId);
VersionClearRestInvoker versionClearRestInvoker = new VersionClearRestInvoker(serviceInstances, consoleRestTemplate, version); VersionClearRestInvoker versionClearRestInvoker = new VersionClearRestInvoker(serviceInstances, consoleRestTemplate, version, async);
return versionClearRestInvoker.invoke(); return versionClearRestInvoker.invoke();
} }
......
...@@ -32,10 +32,12 @@ public abstract class AbstractRestInvoker { ...@@ -32,10 +32,12 @@ public abstract class AbstractRestInvoker {
protected List<ServiceInstance> serviceInstances; protected List<ServiceInstance> serviceInstances;
protected RestTemplate restTemplate; protected RestTemplate restTemplate;
protected boolean async;
public AbstractRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate) { public AbstractRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate, boolean async) {
this.serviceInstances = serviceInstances; this.serviceInstances = serviceInstances;
this.restTemplate = restTemplate; this.restTemplate = restTemplate;
this.async = async;
} }
public ResponseEntity<?> invoke() { public ResponseEntity<?> invoke() {
...@@ -79,6 +81,10 @@ public abstract class AbstractRestInvoker { ...@@ -79,6 +81,10 @@ public abstract class AbstractRestInvoker {
return ResponseEntity.ok().body(resultEntityList); return ResponseEntity.ok().body(resultEntityList);
} }
protected String getInvokeType() {
return async ? "async" : "sync";
}
protected void checkDiscoveryControlPermission(ServiceInstance serviceInstance) { protected void checkDiscoveryControlPermission(ServiceInstance serviceInstance) {
Map<String, String> metadata = serviceInstance.getMetadata(); Map<String, String> metadata = serviceInstance.getMetadata();
......
...@@ -15,8 +15,8 @@ import org.springframework.cloud.client.ServiceInstance; ...@@ -15,8 +15,8 @@ import org.springframework.cloud.client.ServiceInstance;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
public class ConfigClearRestInvoker extends AbstractRestInvoker { public class ConfigClearRestInvoker extends AbstractRestInvoker {
public ConfigClearRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate) { public ConfigClearRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate, boolean async) {
super(serviceInstances, restTemplate); super(serviceInstances, restTemplate, async);
} }
@Override @Override
...@@ -26,7 +26,7 @@ public class ConfigClearRestInvoker extends AbstractRestInvoker { ...@@ -26,7 +26,7 @@ public class ConfigClearRestInvoker extends AbstractRestInvoker {
@Override @Override
protected String getSuffixPath() { protected String getSuffixPath() {
return "config/clear"; return "config/clear-" + getInvokeType();
} }
@Override @Override
......
...@@ -19,13 +19,11 @@ import org.springframework.web.client.RestTemplate; ...@@ -19,13 +19,11 @@ import org.springframework.web.client.RestTemplate;
public class ConfigUpdateRestInvoker extends AbstractRestInvoker { public class ConfigUpdateRestInvoker extends AbstractRestInvoker {
private String config; private String config;
private boolean async;
public ConfigUpdateRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate, String config, boolean async) { public ConfigUpdateRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate, String config, boolean async) {
super(serviceInstances, restTemplate); super(serviceInstances, restTemplate, async);
this.config = config; this.config = config;
this.async = async;
} }
@Override @Override
...@@ -35,7 +33,7 @@ public class ConfigUpdateRestInvoker extends AbstractRestInvoker { ...@@ -35,7 +33,7 @@ public class ConfigUpdateRestInvoker extends AbstractRestInvoker {
@Override @Override
protected String getSuffixPath() { protected String getSuffixPath() {
return "config/update-" + (async ? "async" : "sync"); return "config/update-" + getInvokeType();
} }
@Override @Override
......
...@@ -17,8 +17,8 @@ import org.springframework.web.client.RestTemplate; ...@@ -17,8 +17,8 @@ import org.springframework.web.client.RestTemplate;
public class VersionClearRestInvoker extends AbstractRestInvoker { public class VersionClearRestInvoker extends AbstractRestInvoker {
private String version; private String version;
public VersionClearRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate, String version) { public VersionClearRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate, String version, boolean async) {
super(serviceInstances, restTemplate); super(serviceInstances, restTemplate, async);
this.version = version; this.version = version;
} }
...@@ -30,7 +30,7 @@ public class VersionClearRestInvoker extends AbstractRestInvoker { ...@@ -30,7 +30,7 @@ public class VersionClearRestInvoker extends AbstractRestInvoker {
@Override @Override
protected String getSuffixPath() { protected String getSuffixPath() {
return "version/clear"; return "version/clear-" + getInvokeType();
} }
@Override @Override
......
...@@ -17,8 +17,8 @@ import org.springframework.web.client.RestTemplate; ...@@ -17,8 +17,8 @@ import org.springframework.web.client.RestTemplate;
public class VersionUpdateRestInvoker extends AbstractRestInvoker { public class VersionUpdateRestInvoker extends AbstractRestInvoker {
private String version; private String version;
public VersionUpdateRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate, String version) { public VersionUpdateRestInvoker(List<ServiceInstance> serviceInstances, RestTemplate restTemplate, String version, boolean async) {
super(serviceInstances, restTemplate); super(serviceInstances, restTemplate, async);
this.version = version; this.version = version;
} }
...@@ -30,7 +30,7 @@ public class VersionUpdateRestInvoker extends AbstractRestInvoker { ...@@ -30,7 +30,7 @@ public class VersionUpdateRestInvoker extends AbstractRestInvoker {
@Override @Override
protected String getSuffixPath() { protected String getSuffixPath() {
return "version/update"; return "version/update-" + getInvokeType();
} }
@Override @Override
......
...@@ -68,24 +68,20 @@ public class ConfigEndpoint { ...@@ -68,24 +68,20 @@ public class ConfigEndpoint {
return update(config, false); return update(config, false);
} }
@RequestMapping(path = "/clear", method = RequestMethod.POST) @RequestMapping(path = "/clear-async", method = RequestMethod.POST)
@ApiOperation(value = "清除更新的规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "POST") @ApiOperation(value = "异步清除更新的规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> clear() { public ResponseEntity<?> clearAsync() {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled(); return clear(true);
if (!discoveryControlEnabled) { }
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled");
}
Boolean isConfigRestControlEnabled = pluginContextAware.isConfigRestControlEnabled();
if (!isConfigRestControlEnabled) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Config rest control is disabled");
}
pluginEventWapper.fireRuleCleared(new RuleClearedEvent(), true);
return ResponseEntity.ok().body("OK"); @RequestMapping(path = "/clear-sync", method = RequestMethod.POST)
@ApiOperation(value = "同步清除更新的规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> clearSync() {
return clear(false);
} }
@RequestMapping(path = "/view", method = RequestMethod.GET) @RequestMapping(path = "/view", method = RequestMethod.GET)
...@@ -133,6 +129,22 @@ public class ConfigEndpoint { ...@@ -133,6 +129,22 @@ public class ConfigEndpoint {
return ResponseEntity.ok().body("OK"); return ResponseEntity.ok().body("OK");
} }
private ResponseEntity<?> clear(boolean async) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled");
}
Boolean isConfigRestControlEnabled = pluginContextAware.isConfigRestControlEnabled();
if (!isConfigRestControlEnabled) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Config rest control is disabled");
}
pluginEventWapper.fireRuleCleared(new RuleClearedEvent(), async);
return ResponseEntity.ok().body("OK");
}
protected ResponseEntity<String> toExceptionResponseEntity(Exception e, boolean showDetail) { protected ResponseEntity<String> toExceptionResponseEntity(Exception e, boolean showDetail) {
String message = null; String message = null;
if (showDetail) { if (showDetail) {
......
...@@ -51,11 +51,55 @@ public class VersionEndpoint { ...@@ -51,11 +51,55 @@ public class VersionEndpoint {
@Autowired @Autowired
private PluginEventWapper pluginEventWapper; private PluginEventWapper pluginEventWapper;
@RequestMapping(path = "/update", method = RequestMethod.POST) @RequestMapping(path = "/update-async", method = RequestMethod.POST)
@ApiOperation(value = "更新服务的动态版本", notes = "根据指定的localVersion更新服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接更新服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST") @ApiOperation(value = "异步更新服务的动态版本", notes = "根据指定的localVersion更新服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接更新服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> update(@RequestBody @ApiParam(value = "版本号,格式为[dynamicVersion]或者[dynamicVersion];[localVersion]", required = true) String version) { public ResponseEntity<?> updateAsync(@RequestBody @ApiParam(value = "版本号,格式为[dynamicVersion]或者[dynamicVersion];[localVersion]", required = true) String version) {
return update(version, true);
}
@RequestMapping(path = "/update-sync", method = RequestMethod.POST)
@ApiOperation(value = "同步更新服务的动态版本", notes = "根据指定的localVersion更新服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接更新服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> updateSync(@RequestBody @ApiParam(value = "版本号,格式为[dynamicVersion]或者[dynamicVersion];[localVersion]", required = true) String version) {
return update(version, false);
}
@RequestMapping(path = "/clear-async", method = RequestMethod.POST)
@ApiOperation(value = "异步清除服务的动态版本", notes = "根据指定的localVersion清除服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接清除服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> clearAsync(@RequestBody(required = false) @ApiParam(value = "版本号,指localVersion,可以为空") String version) {
return clear(version, true);
}
@RequestMapping(path = "/clear-sync", method = RequestMethod.POST)
@ApiOperation(value = "同步清除服务的动态版本", notes = "根据指定的localVersion清除服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接清除服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> clearSync(@RequestBody(required = false) @ApiParam(value = "版本号,指localVersion,可以为空") String version) {
return clear(version, false);
}
@RequestMapping(path = "/view", method = RequestMethod.GET)
@ApiOperation(value = "查看服务的本地版本和动态版本", notes = "", response = ResponseEntity.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public ResponseEntity<List<String>> view() {
List<String> versionList = new ArrayList<String>(2);
String localVersion = pluginAdapter.getLocalVersion();
String dynamicVersion = pluginAdapter.getDynamicVersion();
versionList.add(StringUtils.isNotEmpty(localVersion) ? localVersion : StringUtils.EMPTY);
versionList.add(StringUtils.isNotEmpty(dynamicVersion) ? dynamicVersion : StringUtils.EMPTY);
return ResponseEntity.ok().body(versionList);
}
private ResponseEntity<?> update(String version, boolean async) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled(); Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) { if (!discoveryControlEnabled) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled"); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled");
...@@ -77,16 +121,12 @@ public class VersionEndpoint { ...@@ -77,16 +121,12 @@ public class VersionEndpoint {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Invalid version format, it must be '[dynamicVersion]' or '[dynamicVersion];[localVersion]'"); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Invalid version format, it must be '[dynamicVersion]' or '[dynamicVersion];[localVersion]'");
} }
pluginEventWapper.fireVersionUpdated(new VersionUpdatedEvent(dynamicVersion, localVersion), false); pluginEventWapper.fireVersionUpdated(new VersionUpdatedEvent(dynamicVersion, localVersion), async);
return ResponseEntity.ok().body("OK"); return ResponseEntity.ok().body("OK");
} }
@RequestMapping(path = "/clear", method = RequestMethod.POST) private ResponseEntity<?> clear(String version, boolean async) {
@ApiOperation(value = "清除服务的动态版本", notes = "根据指定的localVersion清除服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接清除服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> clear(@RequestBody(required = false) @ApiParam(value = "版本号,指localVersion,可以为空") String version) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled(); Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) { if (!discoveryControlEnabled) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled"); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled");
...@@ -97,24 +137,8 @@ public class VersionEndpoint { ...@@ -97,24 +137,8 @@ public class VersionEndpoint {
version = null; version = null;
} }
pluginEventWapper.fireVersionCleared(new VersionClearedEvent(version), false); pluginEventWapper.fireVersionCleared(new VersionClearedEvent(version), async);
return ResponseEntity.ok().body("OK"); return ResponseEntity.ok().body("OK");
} }
@RequestMapping(path = "/view", method = RequestMethod.GET)
@ApiOperation(value = "查看服务的本地版本和动态版本", notes = "", response = ResponseEntity.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public ResponseEntity<List<String>> view() {
List<String> versionList = new ArrayList<String>(2);
String localVersion = pluginAdapter.getLocalVersion();
String dynamicVersion = pluginAdapter.getDynamicVersion();
versionList.add(StringUtils.isNotEmpty(localVersion) ? localVersion : StringUtils.EMPTY);
versionList.add(StringUtils.isNotEmpty(dynamicVersion) ? dynamicVersion : StringUtils.EMPTY);
return ResponseEntity.ok().body(versionList);
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment