- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
api中如何定义接口(interface)才合理?抛出异常或者返回ErrorCodeBean结果?示例如下:
1.1 接口(interface)
Dto checkAndSetInfoForApply(String domain, String orderNo);
1.2 Dto
public class GroupBuyProductResultDto implements Serializable {
private static final long serialVersionUID = 7942969338660852183L;
private Integer personNum;// 部分选中时必须人数
private ResultTypeEnum resultTypeEnum;//接口返回类型
private String msg;//接口返回信息
}
1.3 结果类型枚举
public enum ResultTypeEnum {
SUCCESS(1,"成功"),
FAIL(2,"失败"),
EXCEPTION(3,"接口异常"),
EXT(4,"扩展");
private int code;
private String desc;
ResultTypeEnum(int code, String desc){
this.code = code;
this.desc = desc;
}
}
1.4 转账
Dto groupBuyDto = coreservGrouBuyProductService.checkAndSetInfoForApply(domain, orderNo);
ResultTypeEnum resultTypeEnum = groupBuyDto.getResultTypeEnum();
switch (resultTypeEnum) {
case EXCEPTION:
throw new GroupBuyException("interface error");
case FAIL:
break;
case SUCCESS:
do somthing...
default:
break;
}
2.1界面
Dto checkAndSetInfoForApply(String domain, String orderNo) throws Exception;
2.2 Dto
public class GroupBuyProductResultDto implements Serializable {
private static final long serialVersionUID = 7942969338660852183L;
private Integer personNum;// 部分选中时必须人数
2.3 转账
try{
Dto groupBuyDto = coreservGrouBuyProductService.checkAndSetInfoForApply(domain, orderNo);
}catch(Exception e){
wrong...
}
哪种方式更合适(1或2)?
最佳答案
在你的场景中,第二种实现更好,推荐的方式是从服务返回一个dto或异常dto到 Controller ,你应该为所有异常定义统一的异常处理 Controller ,你可以引用 spring-boot 的异常处理程序的代码。示例如下所示,
@ControllerAdvice(注释= RestController.class) 公共(public)类 RestExceptionHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(RestExceptionHandler.class);
@ExceptionHandler
@ResponseBody
//@ResponseStatus(HttpStatus.BAD_REQUEST)
private RestResult runtimeExceptionHandler(Exception ex) {
LOGGER.error("---------> error!", ex);
return RestResultBuilder.builder().failure().build();
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
//@ResponseStatus(HttpStatus.BAD_REQUEST)
private RestResult illegalParamsExceptionHandler(MethodArgumentNotValidException ex) {
BindingResult bindingResult = ex.getBindingResult();
Map<String, String> errors = Maps.newHashMapWithExpectedSize(bindingResult
.getFieldErrorCount());
for (FieldError fieldError : bindingResult.getFieldErrors()) {
errors.put(fieldError.getField(), fieldError.getDefaultMessage());
}
LOGGER.warn("---------> invalid request! fields ex:{}", JSON.toJSONString(errors));
return RestResultBuilder.builder().errorCode(GlobalErrorCode.BAD_REQUEST).data
(errors).build();
}
@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
//@ResponseStatus(HttpStatus.BAD_REQUEST)
public RestResult messageNotReadableExceptionHandler(HttpMessageNotReadableException ex) {
LOGGER.warn("---------> json convert failure, exception:{}", ex.getMessage());
return RestResultBuilder.builder().errorCode(GlobalErrorCode.BAD_REQUEST).build();
}
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
//@ResponseStatus(HttpStatus.NOT_FOUND)
@ResponseBody
public RestResult methodArgumentTypeMismatchExceptionHandler(MethodArgumentTypeMismatchException ex) {
LOGGER.error("---------> path variable, exception:{}", ex.getMessage());
return RestResultBuilder.builder().errorCode(GlobalErrorCode.BAD_REQUEST).message(ex.getMessage()).build();
}
}
关于java - api中如何定义接口(interface)才合理?抛出异常或者返回ErrorCodeBean结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42896346/
我有一个曾经是 TreeView 控件的菜单,但现在我想让每个项目更加直观,并向树中的每个对象添加更多信息。 我的第一个意图是制作一个代表项目的用户控件,并在运行时将它们添加到面板中。这是一个好方法吗
我是 Docker 新手,想知道是否有可能(并且是一个好主意)在 Docker 容器中进行开发。我的意思是创建一个容器,执行 bash,安装和配置我需要的一切,然后开始在容器内进行开发。 容器将成为我
在 Java 中: Parent obj = new Child(); 我创建了一个 Parent 类型的对象。我假设我只能调用父类中定义的方法。因此,我无法调用 Child 中定义的“附加”方法或访
注意:我省略了其他两个阶段(V 和 W)的代码,示例中不需要。 我很确定,我这样处理“开”和“关”时间的方式并不是一种有效的方式。 我想使用查找表实现“开”和“关”脉动。计时器应与表的当前选定值进行比
当代码中包含 Java instanceof 运算符时,许多人会扬起眉毛并说这是禁忌。例如,在这个 other SO Q&A ,答案说: Note that if you have to use th
我是一名优秀的程序员,十分优秀!