Browse Source

增加i18n和应用错误处理

master
sige 2 years ago
parent
commit
76d639abec
  1. 4
      src/main/java/com/dreamworks/boditech/BoditechApplication.java
  2. 15
      src/main/java/com/dreamworks/boditech/configuration/LocalConfig.java
  3. 1
      src/main/java/com/dreamworks/boditech/controller/BaseController.java
  4. 5
      src/main/java/com/dreamworks/boditech/controller/entity/ApiResponse.java
  5. 10
      src/main/java/com/dreamworks/boditech/driver/task/Executor.java
  6. 4
      src/main/java/com/dreamworks/boditech/driver/task/TaskTestTubeRackPrepare.java
  7. 4
      src/main/java/com/dreamworks/boditech/service/AccountService.java
  8. 8
      src/main/java/com/dreamworks/boditech/utils/AppError.java
  9. 13
      src/main/java/com/dreamworks/boditech/utils/AppExceptionHandler.java
  10. 16
      src/main/java/com/dreamworks/boditech/utils/AppRuntimeException.java
  11. 22
      src/main/java/com/dreamworks/boditech/utils/I18n.java
  12. 5
      src/main/resources/application.yml
  13. 0
      src/main/resources/static/i18n/messages.properties
  14. 1
      src/main/resources/static/i18n/messages_en_US.properties
  15. 1
      src/main/resources/static/i18n/messages_ko_KR.properties
  16. 1
      src/main/resources/static/i18n/messages_zh_CN.properties

4
src/main/java/com/dreamworks/boditech/BoditechApplication.java

@ -2,8 +2,10 @@ package com.dreamworks.boditech;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import java.util.Locale;
@SpringBootApplication
public class BoditechApplication {
public static void main(String[] args) {

15
src/main/java/com/dreamworks/boditech/configuration/LocalConfig.java

@ -0,0 +1,15 @@
package com.dreamworks.boditech.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;
@Configuration
public class LocalConfig {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.CHINA);
return localeResolver;
}
}

1
src/main/java/com/dreamworks/boditech/controller/BaseController.java

@ -6,6 +6,7 @@ public class BaseController {
response.success = true;
response.message = "OK";
response.data = data;
response.code = "OK";
return response;
}

5
src/main/java/com/dreamworks/boditech/controller/entity/ApiResponse.java

@ -1,6 +1,11 @@
package com.dreamworks.boditech.controller.entity;
public class ApiResponse {
// success or not
public boolean success ;
// error code
public String code;
// message
public String message;
// data
public Object data;
}

10
src/main/java/com/dreamworks/boditech/driver/task/Executor.java

@ -1,6 +1,7 @@
package com.dreamworks.boditech.driver.task;
import com.dreamworks.boditech.driver.Device;
import com.dreamworks.boditech.service.TestService;
import com.dreamworks.boditech.utils.AppRuntimeException;
import com.dreamworks.boditech.utils.MyCommon;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -63,8 +64,13 @@ public class Executor implements Runnable {
continue;
}
task.execute(this);
if (Task.STATUS_FINISHED.equals(task.getStatus())) {
try {
task.execute(this);
if (Task.STATUS_FINISHED.equals(task.getStatus())) {
this.tasks.remove(task);
}
} catch (AppRuntimeException e) {
LOG.error("task execute error", e);
this.tasks.remove(task);
}
}

4
src/main/java/com/dreamworks/boditech/driver/task/TaskTestTubeRackPrepare.java

@ -4,6 +4,8 @@ import com.dreamworks.boditech.driver.actuator.*;
import com.dreamworks.boditech.entity.MdbTestTubeRackTestTask;
import com.dreamworks.boditech.entity.MdbTestTubeRackTestTaskTube;
import com.dreamworks.boditech.service.TestService;
import com.dreamworks.boditech.utils.AppRuntimeException;
import com.dreamworks.boditech.utils.AppError;
import com.dreamworks.boditech.utils.MyCommon;
import java.util.List;
import java.util.Objects;
@ -142,6 +144,6 @@ public class TaskTestTubeRackPrepare extends TaskBase {
}
// 任然没有找到
throw new RuntimeException("TEST_TUBE_RACK_NOT_FOUND");
throw new AppRuntimeException(AppError.TEST_TUBE_RACK_FEED_RACK_NOT_FOUND);
}
}

4
src/main/java/com/dreamworks/boditech/service/AccountService.java

@ -2,6 +2,8 @@ package com.dreamworks.boditech.service;
import com.dreamworks.boditech.entity.ParamUserLogin;
import com.dreamworks.boditech.entity.Account;
import com.dreamworks.boditech.mapper.AccountMapper;
import com.dreamworks.boditech.utils.AppError;
import com.dreamworks.boditech.utils.AppRuntimeException;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -45,7 +47,7 @@ public class AccountService {
Account account = userMapper.findByAccount(param.account);
String hashPin = DigestUtils.md5DigestAsHex(param.pin.getBytes());
if ( null == account || !account.pin.equals(hashPin) ) {
throw new RuntimeException("ACCOUNT_LOGIN_INVALID_ACCOUNT_OR_PIN_CODE");
throw new AppRuntimeException(AppError.ACCOUNT_LOGIN_INVALID_ACCOUNT_OR_PIN_CODE);
}
account.lastLoginTime = (int)(System.currentTimeMillis() / 1000);

8
src/main/java/com/dreamworks/boditech/utils/AppError.java

@ -0,0 +1,8 @@
package com.dreamworks.boditech.utils;
public enum AppError {
// account
ACCOUNT_LOGIN_INVALID_ACCOUNT_OR_PIN_CODE,
TEST_TUBE_RACK_FEED_RACK_NOT_FOUND
}

13
src/main/java/com/dreamworks/boditech/utils/MyExceptionHandler.java → src/main/java/com/dreamworks/boditech/utils/AppExceptionHandler.java

@ -4,7 +4,18 @@ import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class MyExceptionHandler {
public class AppExceptionHandler {
@ExceptionHandler(value = AppRuntimeException.class)
@ResponseBody
public ApiResponse handleAppRuntimeException(AppRuntimeException e) {
ApiResponse response = new ApiResponse();
response.success = false;
response.message = e.getMessage();
response.data = null;
response.code = e.getCode();
return response;
}
@ExceptionHandler(value = RuntimeException.class)
@ResponseBody
public ApiResponse handleRuntimeException(RuntimeException e ) {

16
src/main/java/com/dreamworks/boditech/utils/AppRuntimeException.java

@ -0,0 +1,16 @@
package com.dreamworks.boditech.utils;
public class AppRuntimeException extends RuntimeException {
// error code
private String code = "";
// constructor
public AppRuntimeException(AppError error) {
super(I18n.t("Error." + error.name()));
this.code = error.name();
}
// get error code
public String getCode() {
return this.code;
}
}

22
src/main/java/com/dreamworks/boditech/utils/I18n.java

@ -0,0 +1,22 @@
package com.dreamworks.boditech.utils;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
@Component
public class I18n {
private static MessageSource messageSource;
// constructor
public I18n(MessageSource messageSource) {
I18n.messageSource = messageSource;
}
// translate message
public static String t(String msgKey) {
try {
return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
} catch (Exception e) {
return msgKey;
}
}
}

5
src/main/resources/application.yml

@ -1,3 +1,6 @@
spring:
profiles:
active: dev
active: dev
messages:
basename: static/i18n/messages
encoding: utf-8

0
src/main/resources/static/i18n/messages.properties

1
src/main/resources/static/i18n/messages_en_US.properties

@ -0,0 +1 @@
Error.ACCOUNT_LOGIN_INVALID_ACCOUNT_OR_PIN_CODE = "Invalid account or pin code"

1
src/main/resources/static/i18n/messages_ko_KR.properties

@ -0,0 +1 @@
Error.ACCOUNT_LOGIN_INVALID_ACCOUNT_OR_PIN_CODE = "xxx"

1
src/main/resources/static/i18n/messages_zh_CN.properties

@ -0,0 +1 @@
Error.ACCOUNT_LOGIN_INVALID_ACCOUNT_OR_PIN_CODE = 密码验证失败
Loading…
Cancel
Save