Improve REST API error response handling. Update swagger api.
This commit is contained in:
parent
cd23b85baa
commit
7c2b3a9fbf
@ -339,6 +339,17 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<resource>
|
<resource>
|
||||||
<directory>${project.basedir}/src/main/resources</directory>
|
<directory>${project.basedir}/src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
<includes>
|
||||||
|
<include>thingsboard.yml</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<directory>${project.basedir}/src/main/resources</directory>
|
||||||
|
<filtering>false</filtering>
|
||||||
|
<excludes>
|
||||||
|
<exclude>thingsboard.yml</exclude>
|
||||||
|
</excludes>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|||||||
@ -26,10 +26,12 @@ import org.springframework.core.annotation.Order;
|
|||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
|
import org.thingsboard.server.common.data.StringUtils;
|
||||||
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
|
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
|
||||||
import org.thingsboard.server.common.data.security.Authority;
|
import org.thingsboard.server.common.data.security.Authority;
|
||||||
import org.thingsboard.server.exception.ThingsboardCredentialsExpiredResponse;
|
import org.thingsboard.server.exception.ThingsboardCredentialsExpiredResponse;
|
||||||
import org.thingsboard.server.exception.ThingsboardErrorResponse;
|
import org.thingsboard.server.exception.ThingsboardErrorResponse;
|
||||||
|
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||||
import org.thingsboard.server.service.security.auth.rest.LoginRequest;
|
import org.thingsboard.server.service.security.auth.rest.LoginRequest;
|
||||||
import org.thingsboard.server.service.security.auth.rest.LoginResponse;
|
import org.thingsboard.server.service.security.auth.rest.LoginResponse;
|
||||||
import springfox.documentation.builders.ApiInfoBuilder;
|
import springfox.documentation.builders.ApiInfoBuilder;
|
||||||
@ -81,6 +83,7 @@ import static springfox.documentation.builders.PathSelectors.regex;
|
|||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@TbCoreComponent
|
||||||
public class SwaggerConfiguration {
|
public class SwaggerConfiguration {
|
||||||
|
|
||||||
@Value("${swagger.api_path_regex}")
|
@Value("${swagger.api_path_regex}")
|
||||||
@ -105,6 +108,8 @@ public class SwaggerConfiguration {
|
|||||||
private String licenseUrl;
|
private String licenseUrl;
|
||||||
@Value("${swagger.version}")
|
@Value("${swagger.version}")
|
||||||
private String version;
|
private String version;
|
||||||
|
@Value("${app.version:unknown}")
|
||||||
|
private String appVersion;
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Docket thingsboardApi() {
|
public Docket thingsboardApi() {
|
||||||
@ -231,13 +236,17 @@ public class SwaggerConfiguration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ApiInfo apiInfo() {
|
private ApiInfo apiInfo() {
|
||||||
|
String apiVersion = version;
|
||||||
|
if (StringUtils.isEmpty(apiVersion)) {
|
||||||
|
apiVersion = appVersion;
|
||||||
|
}
|
||||||
return new ApiInfoBuilder()
|
return new ApiInfoBuilder()
|
||||||
.title(title)
|
.title(title)
|
||||||
.description(description)
|
.description(description)
|
||||||
.contact(new Contact(contactName, contactUrl, contactEmail))
|
.contact(new Contact(contactName, contactUrl, contactEmail))
|
||||||
.license(licenseTitle)
|
.license(licenseTitle)
|
||||||
.licenseUrl(licenseUrl)
|
.licenseUrl(licenseUrl)
|
||||||
.version(version)
|
.version(apiVersion)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -73,7 +73,7 @@ public class AdminController extends BaseController {
|
|||||||
@PathVariable("key") String key) throws ThingsboardException {
|
@PathVariable("key") String key) throws ThingsboardException {
|
||||||
try {
|
try {
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.ADMIN_SETTINGS, Operation.READ);
|
accessControlService.checkPermission(getCurrentUser(), Resource.ADMIN_SETTINGS, Operation.READ);
|
||||||
AdminSettings adminSettings = checkNotNull(adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, key));
|
AdminSettings adminSettings = checkNotNull(adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, key), "No Administration settings found for key: " + key);
|
||||||
if (adminSettings.getKey().equals("mail")) {
|
if (adminSettings.getKey().equals("mail")) {
|
||||||
((ObjectNode) adminSettings.getJsonValue()).remove("password");
|
((ObjectNode) adminSettings.getJsonValue()).remove("password");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -319,17 +319,25 @@ public abstract class BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
<T> T checkNotNull(T reference) throws ThingsboardException {
|
<T> T checkNotNull(T reference) throws ThingsboardException {
|
||||||
|
return checkNotNull(reference, "Requested item wasn't found!");
|
||||||
|
}
|
||||||
|
|
||||||
|
<T> T checkNotNull(T reference, String notFoundMessage) throws ThingsboardException {
|
||||||
if (reference == null) {
|
if (reference == null) {
|
||||||
throw new ThingsboardException("Requested item wasn't found!", ThingsboardErrorCode.ITEM_NOT_FOUND);
|
throw new ThingsboardException(notFoundMessage, ThingsboardErrorCode.ITEM_NOT_FOUND);
|
||||||
}
|
}
|
||||||
return reference;
|
return reference;
|
||||||
}
|
}
|
||||||
|
|
||||||
<T> T checkNotNull(Optional<T> reference) throws ThingsboardException {
|
<T> T checkNotNull(Optional<T> reference) throws ThingsboardException {
|
||||||
|
return checkNotNull(reference, "Requested item wasn't found!");
|
||||||
|
}
|
||||||
|
|
||||||
|
<T> T checkNotNull(Optional<T> reference, String notFoundMessage) throws ThingsboardException {
|
||||||
if (reference.isPresent()) {
|
if (reference.isPresent()) {
|
||||||
return reference.get();
|
return reference.get();
|
||||||
} else {
|
} else {
|
||||||
throw new ThingsboardException("Requested item wasn't found!", ThingsboardErrorCode.ITEM_NOT_FOUND);
|
throw new ThingsboardException(notFoundMessage, ThingsboardErrorCode.ITEM_NOT_FOUND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,7 +397,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
|
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
|
||||||
Tenant tenant = tenantService.findTenantById(tenantId);
|
Tenant tenant = tenantService.findTenantById(tenantId);
|
||||||
checkNotNull(tenant);
|
checkNotNull(tenant, "Tenant with id [" + tenantId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.TENANT, operation, tenantId, tenant);
|
accessControlService.checkPermission(getCurrentUser(), Resource.TENANT, operation, tenantId, tenant);
|
||||||
return tenant;
|
return tenant;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -401,7 +409,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
|
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
|
||||||
TenantInfo tenant = tenantService.findTenantInfoById(tenantId);
|
TenantInfo tenant = tenantService.findTenantInfoById(tenantId);
|
||||||
checkNotNull(tenant);
|
checkNotNull(tenant, "Tenant with id [" + tenantId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.TENANT, operation, tenantId, tenant);
|
accessControlService.checkPermission(getCurrentUser(), Resource.TENANT, operation, tenantId, tenant);
|
||||||
return tenant;
|
return tenant;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -413,7 +421,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(tenantProfileId, "Incorrect tenantProfileId " + tenantProfileId);
|
validateId(tenantProfileId, "Incorrect tenantProfileId " + tenantProfileId);
|
||||||
TenantProfile tenantProfile = tenantProfileService.findTenantProfileById(getTenantId(), tenantProfileId);
|
TenantProfile tenantProfile = tenantProfileService.findTenantProfileById(getTenantId(), tenantProfileId);
|
||||||
checkNotNull(tenantProfile);
|
checkNotNull(tenantProfile, "Tenant profile with id [" + tenantProfileId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.TENANT_PROFILE, operation);
|
accessControlService.checkPermission(getCurrentUser(), Resource.TENANT_PROFILE, operation);
|
||||||
return tenantProfile;
|
return tenantProfile;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -429,7 +437,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(customerId, "Incorrect customerId " + customerId);
|
validateId(customerId, "Incorrect customerId " + customerId);
|
||||||
Customer customer = customerService.findCustomerById(getTenantId(), customerId);
|
Customer customer = customerService.findCustomerById(getTenantId(), customerId);
|
||||||
checkNotNull(customer);
|
checkNotNull(customer, "Customer with id [" + customerId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.CUSTOMER, operation, customerId, customer);
|
accessControlService.checkPermission(getCurrentUser(), Resource.CUSTOMER, operation, customerId, customer);
|
||||||
return customer;
|
return customer;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -441,7 +449,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(userId, "Incorrect userId " + userId);
|
validateId(userId, "Incorrect userId " + userId);
|
||||||
User user = userService.findUserById(getCurrentUser().getTenantId(), userId);
|
User user = userService.findUserById(getCurrentUser().getTenantId(), userId);
|
||||||
checkNotNull(user);
|
checkNotNull(user, "User with id [" + userId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.USER, operation, userId, user);
|
accessControlService.checkPermission(getCurrentUser(), Resource.USER, operation, userId, user);
|
||||||
return user;
|
return user;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -460,7 +468,9 @@ public abstract class BaseController {
|
|||||||
|
|
||||||
protected void checkEntityId(EntityId entityId, Operation operation) throws ThingsboardException {
|
protected void checkEntityId(EntityId entityId, Operation operation) throws ThingsboardException {
|
||||||
try {
|
try {
|
||||||
checkNotNull(entityId);
|
if (entityId == null) {
|
||||||
|
throw new ThingsboardException("Parameter entityId can't be empty!", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
|
||||||
|
}
|
||||||
validateId(entityId.getId(), "Incorrect entityId " + entityId);
|
validateId(entityId.getId(), "Incorrect entityId " + entityId);
|
||||||
switch (entityId.getEntityType()) {
|
switch (entityId.getEntityType()) {
|
||||||
case ALARM:
|
case ALARM:
|
||||||
@ -526,7 +536,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(deviceId, "Incorrect deviceId " + deviceId);
|
validateId(deviceId, "Incorrect deviceId " + deviceId);
|
||||||
Device device = deviceService.findDeviceById(getCurrentUser().getTenantId(), deviceId);
|
Device device = deviceService.findDeviceById(getCurrentUser().getTenantId(), deviceId);
|
||||||
checkNotNull(device);
|
checkNotNull(device, "Device with id [" + deviceId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation, deviceId, device);
|
accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation, deviceId, device);
|
||||||
return device;
|
return device;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -538,7 +548,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(deviceId, "Incorrect deviceId " + deviceId);
|
validateId(deviceId, "Incorrect deviceId " + deviceId);
|
||||||
DeviceInfo device = deviceService.findDeviceInfoById(getCurrentUser().getTenantId(), deviceId);
|
DeviceInfo device = deviceService.findDeviceInfoById(getCurrentUser().getTenantId(), deviceId);
|
||||||
checkNotNull(device);
|
checkNotNull(device, "Device with id [" + deviceId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation, deviceId, device);
|
accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation, deviceId, device);
|
||||||
return device;
|
return device;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -550,7 +560,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(deviceProfileId, "Incorrect deviceProfileId " + deviceProfileId);
|
validateId(deviceProfileId, "Incorrect deviceProfileId " + deviceProfileId);
|
||||||
DeviceProfile deviceProfile = deviceProfileService.findDeviceProfileById(getCurrentUser().getTenantId(), deviceProfileId);
|
DeviceProfile deviceProfile = deviceProfileService.findDeviceProfileById(getCurrentUser().getTenantId(), deviceProfileId);
|
||||||
checkNotNull(deviceProfile);
|
checkNotNull(deviceProfile, "Device profile with id [" + deviceProfileId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE_PROFILE, operation, deviceProfileId, deviceProfile);
|
accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE_PROFILE, operation, deviceProfileId, deviceProfile);
|
||||||
return deviceProfile;
|
return deviceProfile;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -562,7 +572,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(entityViewId, "Incorrect entityViewId " + entityViewId);
|
validateId(entityViewId, "Incorrect entityViewId " + entityViewId);
|
||||||
EntityView entityView = entityViewService.findEntityViewById(getCurrentUser().getTenantId(), entityViewId);
|
EntityView entityView = entityViewService.findEntityViewById(getCurrentUser().getTenantId(), entityViewId);
|
||||||
checkNotNull(entityView);
|
checkNotNull(entityView, "Entity view with id [" + entityViewId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.ENTITY_VIEW, operation, entityViewId, entityView);
|
accessControlService.checkPermission(getCurrentUser(), Resource.ENTITY_VIEW, operation, entityViewId, entityView);
|
||||||
return entityView;
|
return entityView;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -574,7 +584,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(entityViewId, "Incorrect entityViewId " + entityViewId);
|
validateId(entityViewId, "Incorrect entityViewId " + entityViewId);
|
||||||
EntityViewInfo entityView = entityViewService.findEntityViewInfoById(getCurrentUser().getTenantId(), entityViewId);
|
EntityViewInfo entityView = entityViewService.findEntityViewInfoById(getCurrentUser().getTenantId(), entityViewId);
|
||||||
checkNotNull(entityView);
|
checkNotNull(entityView, "Entity view with id [" + entityViewId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.ENTITY_VIEW, operation, entityViewId, entityView);
|
accessControlService.checkPermission(getCurrentUser(), Resource.ENTITY_VIEW, operation, entityViewId, entityView);
|
||||||
return entityView;
|
return entityView;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -586,7 +596,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(assetId, "Incorrect assetId " + assetId);
|
validateId(assetId, "Incorrect assetId " + assetId);
|
||||||
Asset asset = assetService.findAssetById(getCurrentUser().getTenantId(), assetId);
|
Asset asset = assetService.findAssetById(getCurrentUser().getTenantId(), assetId);
|
||||||
checkNotNull(asset);
|
checkNotNull(asset, "Asset with id [" + assetId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.ASSET, operation, assetId, asset);
|
accessControlService.checkPermission(getCurrentUser(), Resource.ASSET, operation, assetId, asset);
|
||||||
return asset;
|
return asset;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -598,7 +608,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(assetId, "Incorrect assetId " + assetId);
|
validateId(assetId, "Incorrect assetId " + assetId);
|
||||||
AssetInfo asset = assetService.findAssetInfoById(getCurrentUser().getTenantId(), assetId);
|
AssetInfo asset = assetService.findAssetInfoById(getCurrentUser().getTenantId(), assetId);
|
||||||
checkNotNull(asset);
|
checkNotNull(asset, "Asset with id [" + assetId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.ASSET, operation, assetId, asset);
|
accessControlService.checkPermission(getCurrentUser(), Resource.ASSET, operation, assetId, asset);
|
||||||
return asset;
|
return asset;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -610,7 +620,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(alarmId, "Incorrect alarmId " + alarmId);
|
validateId(alarmId, "Incorrect alarmId " + alarmId);
|
||||||
Alarm alarm = alarmService.findAlarmByIdAsync(getCurrentUser().getTenantId(), alarmId).get();
|
Alarm alarm = alarmService.findAlarmByIdAsync(getCurrentUser().getTenantId(), alarmId).get();
|
||||||
checkNotNull(alarm);
|
checkNotNull(alarm, "Alarm with id [" + alarmId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.ALARM, operation, alarmId, alarm);
|
accessControlService.checkPermission(getCurrentUser(), Resource.ALARM, operation, alarmId, alarm);
|
||||||
return alarm;
|
return alarm;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -622,7 +632,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(alarmId, "Incorrect alarmId " + alarmId);
|
validateId(alarmId, "Incorrect alarmId " + alarmId);
|
||||||
AlarmInfo alarmInfo = alarmService.findAlarmInfoByIdAsync(getCurrentUser().getTenantId(), alarmId).get();
|
AlarmInfo alarmInfo = alarmService.findAlarmInfoByIdAsync(getCurrentUser().getTenantId(), alarmId).get();
|
||||||
checkNotNull(alarmInfo);
|
checkNotNull(alarmInfo, "Alarm with id [" + alarmId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.ALARM, operation, alarmId, alarmInfo);
|
accessControlService.checkPermission(getCurrentUser(), Resource.ALARM, operation, alarmId, alarmInfo);
|
||||||
return alarmInfo;
|
return alarmInfo;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -634,7 +644,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(widgetsBundleId, "Incorrect widgetsBundleId " + widgetsBundleId);
|
validateId(widgetsBundleId, "Incorrect widgetsBundleId " + widgetsBundleId);
|
||||||
WidgetsBundle widgetsBundle = widgetsBundleService.findWidgetsBundleById(getCurrentUser().getTenantId(), widgetsBundleId);
|
WidgetsBundle widgetsBundle = widgetsBundleService.findWidgetsBundleById(getCurrentUser().getTenantId(), widgetsBundleId);
|
||||||
checkNotNull(widgetsBundle);
|
checkNotNull(widgetsBundle, "Widgets bundle with id [" + widgetsBundleId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.WIDGETS_BUNDLE, operation, widgetsBundleId, widgetsBundle);
|
accessControlService.checkPermission(getCurrentUser(), Resource.WIDGETS_BUNDLE, operation, widgetsBundleId, widgetsBundle);
|
||||||
return widgetsBundle;
|
return widgetsBundle;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -646,7 +656,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(widgetTypeId, "Incorrect widgetTypeId " + widgetTypeId);
|
validateId(widgetTypeId, "Incorrect widgetTypeId " + widgetTypeId);
|
||||||
WidgetTypeDetails widgetTypeDetails = widgetTypeService.findWidgetTypeDetailsById(getCurrentUser().getTenantId(), widgetTypeId);
|
WidgetTypeDetails widgetTypeDetails = widgetTypeService.findWidgetTypeDetailsById(getCurrentUser().getTenantId(), widgetTypeId);
|
||||||
checkNotNull(widgetTypeDetails);
|
checkNotNull(widgetTypeDetails, "Widget type with id [" + widgetTypeId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.WIDGET_TYPE, operation, widgetTypeId, widgetTypeDetails);
|
accessControlService.checkPermission(getCurrentUser(), Resource.WIDGET_TYPE, operation, widgetTypeId, widgetTypeDetails);
|
||||||
return widgetTypeDetails;
|
return widgetTypeDetails;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -658,7 +668,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(dashboardId, "Incorrect dashboardId " + dashboardId);
|
validateId(dashboardId, "Incorrect dashboardId " + dashboardId);
|
||||||
Dashboard dashboard = dashboardService.findDashboardById(getCurrentUser().getTenantId(), dashboardId);
|
Dashboard dashboard = dashboardService.findDashboardById(getCurrentUser().getTenantId(), dashboardId);
|
||||||
checkNotNull(dashboard);
|
checkNotNull(dashboard, "Dashboard with id [" + dashboardId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.DASHBOARD, operation, dashboardId, dashboard);
|
accessControlService.checkPermission(getCurrentUser(), Resource.DASHBOARD, operation, dashboardId, dashboard);
|
||||||
return dashboard;
|
return dashboard;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -670,7 +680,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(edgeId, "Incorrect edgeId " + edgeId);
|
validateId(edgeId, "Incorrect edgeId " + edgeId);
|
||||||
Edge edge = edgeService.findEdgeById(getTenantId(), edgeId);
|
Edge edge = edgeService.findEdgeById(getTenantId(), edgeId);
|
||||||
checkNotNull(edge);
|
checkNotNull(edge, "Edge with id [" + edgeId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation, edgeId, edge);
|
accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation, edgeId, edge);
|
||||||
return edge;
|
return edge;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -682,7 +692,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(edgeId, "Incorrect edgeId " + edgeId);
|
validateId(edgeId, "Incorrect edgeId " + edgeId);
|
||||||
EdgeInfo edge = edgeService.findEdgeInfoById(getCurrentUser().getTenantId(), edgeId);
|
EdgeInfo edge = edgeService.findEdgeInfoById(getCurrentUser().getTenantId(), edgeId);
|
||||||
checkNotNull(edge);
|
checkNotNull(edge, "Edge with id [" + edgeId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation, edgeId, edge);
|
accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation, edgeId, edge);
|
||||||
return edge;
|
return edge;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -694,7 +704,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(dashboardId, "Incorrect dashboardId " + dashboardId);
|
validateId(dashboardId, "Incorrect dashboardId " + dashboardId);
|
||||||
DashboardInfo dashboardInfo = dashboardService.findDashboardInfoById(getCurrentUser().getTenantId(), dashboardId);
|
DashboardInfo dashboardInfo = dashboardService.findDashboardInfoById(getCurrentUser().getTenantId(), dashboardId);
|
||||||
checkNotNull(dashboardInfo);
|
checkNotNull(dashboardInfo, "Dashboard with id [" + dashboardId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.DASHBOARD, operation, dashboardId, dashboardInfo);
|
accessControlService.checkPermission(getCurrentUser(), Resource.DASHBOARD, operation, dashboardId, dashboardInfo);
|
||||||
return dashboardInfo;
|
return dashboardInfo;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -732,7 +742,7 @@ public abstract class BaseController {
|
|||||||
protected RuleChain checkRuleChain(RuleChainId ruleChainId, Operation operation) throws ThingsboardException {
|
protected RuleChain checkRuleChain(RuleChainId ruleChainId, Operation operation) throws ThingsboardException {
|
||||||
validateId(ruleChainId, "Incorrect ruleChainId " + ruleChainId);
|
validateId(ruleChainId, "Incorrect ruleChainId " + ruleChainId);
|
||||||
RuleChain ruleChain = ruleChainService.findRuleChainById(getCurrentUser().getTenantId(), ruleChainId);
|
RuleChain ruleChain = ruleChainService.findRuleChainById(getCurrentUser().getTenantId(), ruleChainId);
|
||||||
checkNotNull(ruleChain);
|
checkNotNull(ruleChain, "Rule chain with id [" + ruleChainId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.RULE_CHAIN, operation, ruleChainId, ruleChain);
|
accessControlService.checkPermission(getCurrentUser(), Resource.RULE_CHAIN, operation, ruleChainId, ruleChain);
|
||||||
return ruleChain;
|
return ruleChain;
|
||||||
}
|
}
|
||||||
@ -740,7 +750,7 @@ public abstract class BaseController {
|
|||||||
protected RuleNode checkRuleNode(RuleNodeId ruleNodeId, Operation operation) throws ThingsboardException {
|
protected RuleNode checkRuleNode(RuleNodeId ruleNodeId, Operation operation) throws ThingsboardException {
|
||||||
validateId(ruleNodeId, "Incorrect ruleNodeId " + ruleNodeId);
|
validateId(ruleNodeId, "Incorrect ruleNodeId " + ruleNodeId);
|
||||||
RuleNode ruleNode = ruleChainService.findRuleNodeById(getTenantId(), ruleNodeId);
|
RuleNode ruleNode = ruleChainService.findRuleNodeById(getTenantId(), ruleNodeId);
|
||||||
checkNotNull(ruleNode);
|
checkNotNull(ruleNode, "Rule node with id [" + ruleNodeId + "] is not found");
|
||||||
checkRuleChain(ruleNode.getRuleChainId(), operation);
|
checkRuleChain(ruleNode.getRuleChainId(), operation);
|
||||||
return ruleNode;
|
return ruleNode;
|
||||||
}
|
}
|
||||||
@ -749,7 +759,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(resourceId, "Incorrect resourceId " + resourceId);
|
validateId(resourceId, "Incorrect resourceId " + resourceId);
|
||||||
TbResource resource = resourceService.findResourceById(getCurrentUser().getTenantId(), resourceId);
|
TbResource resource = resourceService.findResourceById(getCurrentUser().getTenantId(), resourceId);
|
||||||
checkNotNull(resource);
|
checkNotNull(resource, "Resource with id [" + resourceId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.TB_RESOURCE, operation, resourceId, resource);
|
accessControlService.checkPermission(getCurrentUser(), Resource.TB_RESOURCE, operation, resourceId, resource);
|
||||||
return resource;
|
return resource;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -761,7 +771,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(resourceId, "Incorrect resourceId " + resourceId);
|
validateId(resourceId, "Incorrect resourceId " + resourceId);
|
||||||
TbResourceInfo resourceInfo = resourceService.findResourceInfoById(getCurrentUser().getTenantId(), resourceId);
|
TbResourceInfo resourceInfo = resourceService.findResourceInfoById(getCurrentUser().getTenantId(), resourceId);
|
||||||
checkNotNull(resourceInfo);
|
checkNotNull(resourceInfo, "Resource with id [" + resourceId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.TB_RESOURCE, operation, resourceId, resourceInfo);
|
accessControlService.checkPermission(getCurrentUser(), Resource.TB_RESOURCE, operation, resourceId, resourceInfo);
|
||||||
return resourceInfo;
|
return resourceInfo;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -773,7 +783,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(otaPackageId, "Incorrect otaPackageId " + otaPackageId);
|
validateId(otaPackageId, "Incorrect otaPackageId " + otaPackageId);
|
||||||
OtaPackage otaPackage = otaPackageService.findOtaPackageById(getCurrentUser().getTenantId(), otaPackageId);
|
OtaPackage otaPackage = otaPackageService.findOtaPackageById(getCurrentUser().getTenantId(), otaPackageId);
|
||||||
checkNotNull(otaPackage);
|
checkNotNull(otaPackage, "OTA package with id [" + otaPackageId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.OTA_PACKAGE, operation, otaPackageId, otaPackage);
|
accessControlService.checkPermission(getCurrentUser(), Resource.OTA_PACKAGE, operation, otaPackageId, otaPackage);
|
||||||
return otaPackage;
|
return otaPackage;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -785,7 +795,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(otaPackageId, "Incorrect otaPackageId " + otaPackageId);
|
validateId(otaPackageId, "Incorrect otaPackageId " + otaPackageId);
|
||||||
OtaPackageInfo otaPackageIn = otaPackageService.findOtaPackageInfoById(getCurrentUser().getTenantId(), otaPackageId);
|
OtaPackageInfo otaPackageIn = otaPackageService.findOtaPackageInfoById(getCurrentUser().getTenantId(), otaPackageId);
|
||||||
checkNotNull(otaPackageIn);
|
checkNotNull(otaPackageIn, "OTA package with id [" + otaPackageId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.OTA_PACKAGE, operation, otaPackageId, otaPackageIn);
|
accessControlService.checkPermission(getCurrentUser(), Resource.OTA_PACKAGE, operation, otaPackageId, otaPackageIn);
|
||||||
return otaPackageIn;
|
return otaPackageIn;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -797,7 +807,7 @@ public abstract class BaseController {
|
|||||||
try {
|
try {
|
||||||
validateId(rpcId, "Incorrect rpcId " + rpcId);
|
validateId(rpcId, "Incorrect rpcId " + rpcId);
|
||||||
Rpc rpc = rpcService.findById(getCurrentUser().getTenantId(), rpcId);
|
Rpc rpc = rpcService.findById(getCurrentUser().getTenantId(), rpcId);
|
||||||
checkNotNull(rpc);
|
checkNotNull(rpc, "RPC with id [" + rpcId + "] is not found");
|
||||||
accessControlService.checkPermission(getCurrentUser(), Resource.RPC, operation, rpcId, rpc);
|
accessControlService.checkPermission(getCurrentUser(), Resource.RPC, operation, rpcId, rpc);
|
||||||
return rpc;
|
return rpc;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@ -240,7 +240,7 @@ public class CustomerController extends BaseController {
|
|||||||
@RequestParam String customerTitle) throws ThingsboardException {
|
@RequestParam String customerTitle) throws ThingsboardException {
|
||||||
try {
|
try {
|
||||||
TenantId tenantId = getCurrentUser().getTenantId();
|
TenantId tenantId = getCurrentUser().getTenantId();
|
||||||
return checkNotNull(customerService.findCustomerByTenantIdAndTitle(tenantId, customerTitle));
|
return checkNotNull(customerService.findCustomerByTenantIdAndTitle(tenantId, customerTitle), "Customer with title [" + customerTitle + "] is not found");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw handleException(e);
|
throw handleException(e);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,9 @@ import com.fasterxml.jackson.databind.JsonNode;
|
|||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import io.swagger.annotations.ApiParam;
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import io.swagger.annotations.ApiResponse;
|
||||||
|
import io.swagger.annotations.Example;
|
||||||
|
import io.swagger.annotations.ExampleProperty;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
@ -106,6 +109,7 @@ public class DashboardController extends BaseController {
|
|||||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
|
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
|
||||||
@RequestMapping(value = "/dashboard/serverTime", method = RequestMethod.GET)
|
@RequestMapping(value = "/dashboard/serverTime", method = RequestMethod.GET)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
|
@ApiResponse(code = 200, message = "OK", examples = @Example(value = @ExampleProperty(value = "1636023857137", mediaType = "application/json")))
|
||||||
public long getServerTime() throws ThingsboardException {
|
public long getServerTime() throws ThingsboardException {
|
||||||
return System.currentTimeMillis();
|
return System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
@ -118,6 +122,7 @@ public class DashboardController extends BaseController {
|
|||||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
|
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
|
||||||
@RequestMapping(value = "/dashboard/maxDatapointsLimit", method = RequestMethod.GET)
|
@RequestMapping(value = "/dashboard/maxDatapointsLimit", method = RequestMethod.GET)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
|
@ApiResponse(code = 200, message = "OK", examples = @Example(value = @ExampleProperty(value = "5000", mediaType = "application/json")))
|
||||||
public long getMaxDatapointsLimit() throws ThingsboardException {
|
public long getMaxDatapointsLimit() throws ThingsboardException {
|
||||||
return maxDatapointsLimit;
|
return maxDatapointsLimit;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,9 +17,13 @@ package org.thingsboard.server.exception;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.security.access.AccessDeniedException;
|
import org.springframework.security.access.AccessDeniedException;
|
||||||
import org.springframework.security.authentication.BadCredentialsException;
|
import org.springframework.security.authentication.BadCredentialsException;
|
||||||
import org.springframework.security.authentication.DisabledException;
|
import org.springframework.security.authentication.DisabledException;
|
||||||
@ -30,7 +34,9 @@ import org.springframework.security.web.access.AccessDeniedHandler;
|
|||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
import org.springframework.web.client.HttpClientErrorException;
|
import org.springframework.web.client.HttpClientErrorException;
|
||||||
|
import org.springframework.web.context.request.WebRequest;
|
||||||
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
|
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
|
||||||
|
import org.springframework.web.util.WebUtils;
|
||||||
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
|
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
|
||||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
||||||
import org.thingsboard.server.common.msg.tools.TbRateLimitsException;
|
import org.thingsboard.server.common.msg.tools.TbRateLimitsException;
|
||||||
@ -42,11 +48,49 @@ import javax.servlet.ServletException;
|
|||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RestControllerAdvice
|
@RestControllerAdvice
|
||||||
public class ThingsboardErrorResponseHandler extends ResponseEntityExceptionHandler implements AccessDeniedHandler {
|
public class ThingsboardErrorResponseHandler extends ResponseEntityExceptionHandler implements AccessDeniedHandler {
|
||||||
|
|
||||||
|
private static final Map<HttpStatus, ThingsboardErrorCode> statusToErrorCodeMap = new HashMap<>();
|
||||||
|
static {
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.BAD_REQUEST, ThingsboardErrorCode.BAD_REQUEST_PARAMS);
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.UNAUTHORIZED, ThingsboardErrorCode.AUTHENTICATION);
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.FORBIDDEN, ThingsboardErrorCode.PERMISSION_DENIED);
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.NOT_FOUND, ThingsboardErrorCode.ITEM_NOT_FOUND);
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.METHOD_NOT_ALLOWED, ThingsboardErrorCode.BAD_REQUEST_PARAMS);
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.NOT_ACCEPTABLE, ThingsboardErrorCode.BAD_REQUEST_PARAMS);
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.UNSUPPORTED_MEDIA_TYPE, ThingsboardErrorCode.BAD_REQUEST_PARAMS);
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.TOO_MANY_REQUESTS, ThingsboardErrorCode.TOO_MANY_REQUESTS);
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.INTERNAL_SERVER_ERROR, ThingsboardErrorCode.GENERAL);
|
||||||
|
statusToErrorCodeMap.put(HttpStatus.SERVICE_UNAVAILABLE, ThingsboardErrorCode.GENERAL);
|
||||||
|
}
|
||||||
|
private static final Map<ThingsboardErrorCode, HttpStatus> errorCodeToStatusMap = new HashMap<>();
|
||||||
|
static {
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.GENERAL, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.AUTHENTICATION, HttpStatus.UNAUTHORIZED);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.JWT_TOKEN_EXPIRED, HttpStatus.UNAUTHORIZED);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.CREDENTIALS_EXPIRED, HttpStatus.UNAUTHORIZED);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.PERMISSION_DENIED, HttpStatus.FORBIDDEN);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.INVALID_ARGUMENTS, HttpStatus.BAD_REQUEST);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.BAD_REQUEST_PARAMS, HttpStatus.BAD_REQUEST);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.ITEM_NOT_FOUND, HttpStatus.NOT_FOUND);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.TOO_MANY_REQUESTS, HttpStatus.TOO_MANY_REQUESTS);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.TOO_MANY_UPDATES, HttpStatus.TOO_MANY_REQUESTS);
|
||||||
|
errorCodeToStatusMap.put(ThingsboardErrorCode.SUBSCRIPTION_VIOLATION, HttpStatus.FORBIDDEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ThingsboardErrorCode statusToErrorCode(HttpStatus status) {
|
||||||
|
return statusToErrorCodeMap.getOrDefault(status, ThingsboardErrorCode.GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpStatus errorCodeToStatus(ThingsboardErrorCode errorCode) {
|
||||||
|
return errorCodeToStatusMap.getOrDefault(errorCode, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ObjectMapper mapper;
|
private ObjectMapper mapper;
|
||||||
|
|
||||||
@ -95,36 +139,22 @@ public class ThingsboardErrorResponseHandler extends ResponseEntityExceptionHand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
protected ResponseEntity<Object> handleExceptionInternal(
|
||||||
|
@NotNull Exception ex, @Nullable Object body,
|
||||||
|
@NotNull HttpHeaders headers, @NotNull HttpStatus status,
|
||||||
|
@NotNull WebRequest request) {
|
||||||
|
if (HttpStatus.INTERNAL_SERVER_ERROR.equals(status)) {
|
||||||
|
request.setAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE, ex, WebRequest.SCOPE_REQUEST);
|
||||||
|
}
|
||||||
|
ThingsboardErrorCode errorCode = statusToErrorCode(status);
|
||||||
|
return new ResponseEntity<>(ThingsboardErrorResponse.of(ex.getMessage(), errorCode, status), headers, status);
|
||||||
|
}
|
||||||
|
|
||||||
private void handleThingsboardException(ThingsboardException thingsboardException, HttpServletResponse response) throws IOException {
|
private void handleThingsboardException(ThingsboardException thingsboardException, HttpServletResponse response) throws IOException {
|
||||||
|
|
||||||
ThingsboardErrorCode errorCode = thingsboardException.getErrorCode();
|
ThingsboardErrorCode errorCode = thingsboardException.getErrorCode();
|
||||||
HttpStatus status;
|
HttpStatus status = errorCodeToStatus(errorCode);
|
||||||
|
|
||||||
switch (errorCode) {
|
|
||||||
case AUTHENTICATION:
|
|
||||||
status = HttpStatus.UNAUTHORIZED;
|
|
||||||
break;
|
|
||||||
case PERMISSION_DENIED:
|
|
||||||
status = HttpStatus.FORBIDDEN;
|
|
||||||
break;
|
|
||||||
case INVALID_ARGUMENTS:
|
|
||||||
status = HttpStatus.BAD_REQUEST;
|
|
||||||
break;
|
|
||||||
case ITEM_NOT_FOUND:
|
|
||||||
status = HttpStatus.NOT_FOUND;
|
|
||||||
break;
|
|
||||||
case BAD_REQUEST_PARAMS:
|
|
||||||
status = HttpStatus.BAD_REQUEST;
|
|
||||||
break;
|
|
||||||
case GENERAL:
|
|
||||||
status = HttpStatus.INTERNAL_SERVER_ERROR;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
status = HttpStatus.INTERNAL_SERVER_ERROR;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
response.setStatus(status.value());
|
response.setStatus(status.value());
|
||||||
mapper.writeValue(response.getWriter(), ThingsboardErrorResponse.of(thingsboardException.getMessage(), errorCode, status));
|
mapper.writeValue(response.getWriter(), ThingsboardErrorResponse.of(thingsboardException.getMessage(), errorCode, status));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -89,6 +89,11 @@ server:
|
|||||||
# Default value of the server side RPC timeout.
|
# Default value of the server side RPC timeout.
|
||||||
default_timeout: "${DEFAULT_SERVER_SIDE_RPC_TIMEOUT:10000}"
|
default_timeout: "${DEFAULT_SERVER_SIDE_RPC_TIMEOUT:10000}"
|
||||||
|
|
||||||
|
# Application info
|
||||||
|
app:
|
||||||
|
# Application version
|
||||||
|
version: "@project.version@"
|
||||||
|
|
||||||
# Zookeeper connection parameters. Used for service discovery.
|
# Zookeeper connection parameters. Used for service discovery.
|
||||||
zk:
|
zk:
|
||||||
# Enable/disable zookeeper discovery service.
|
# Enable/disable zookeeper discovery service.
|
||||||
@ -859,7 +864,7 @@ swagger:
|
|||||||
license:
|
license:
|
||||||
title: "${SWAGGER_LICENSE_TITLE:Apache License Version 2.0}"
|
title: "${SWAGGER_LICENSE_TITLE:Apache License Version 2.0}"
|
||||||
url: "${SWAGGER_LICENSE_URL:https://github.com/thingsboard/thingsboard/blob/master/LICENSE}"
|
url: "${SWAGGER_LICENSE_URL:https://github.com/thingsboard/thingsboard/blob/master/LICENSE}"
|
||||||
version: "${SWAGGER_VERSION:2.0}"
|
version: "${SWAGGER_VERSION:}"
|
||||||
|
|
||||||
queue:
|
queue:
|
||||||
type: "${TB_QUEUE_TYPE:in-memory}" # in-memory or kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ)
|
type: "${TB_QUEUE_TYPE:in-memory}" # in-memory or kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ)
|
||||||
|
|||||||
@ -58,7 +58,7 @@ public class AdminSettings extends BaseData<AdminSettingsId> {
|
|||||||
return super.getCreatedTime();
|
return super.getCreatedTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiModelProperty(position = 3, value = "The Administration Settings key, (e.g. 'general' or 'mail')")
|
@ApiModelProperty(position = 3, value = "The Administration Settings key, (e.g. 'general' or 'mail')", example = "mail")
|
||||||
public String getKey() {
|
public String getKey() {
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@ -83,7 +83,7 @@
|
|||||||
<rabbitmq.version>4.8.0</rabbitmq.version>
|
<rabbitmq.version>4.8.0</rabbitmq.version>
|
||||||
<surfire.version>2.19.1</surfire.version>
|
<surfire.version>2.19.1</surfire.version>
|
||||||
<jar-plugin.version>3.0.2</jar-plugin.version>
|
<jar-plugin.version>3.0.2</jar-plugin.version>
|
||||||
<springfox-swagger.version>3.0.3</springfox-swagger.version>
|
<springfox-swagger.version>3.0.4</springfox-swagger.version>
|
||||||
<swagger-annotations.version>1.6.3</swagger-annotations.version>
|
<swagger-annotations.version>1.6.3</swagger-annotations.version>
|
||||||
<spatial4j.version>0.7</spatial4j.version>
|
<spatial4j.version>0.7</spatial4j.version>
|
||||||
<jts.version>1.15.0</jts.version>
|
<jts.version>1.15.0</jts.version>
|
||||||
|
|||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user