我的REST端点返回ResponseEntity<SomeDto>或只返回SomeDto。由此,我产生了自吹自擂,被前端所消耗。当然,类型信息SomeDto是至关重要的。
在我的端点方法中,我正在做一些基本的检查,以防止异常发生(尽可能快地失败)。
在这种情况下返回ResponseEntity.badRequest().build()可以很好,但是我想向主体添加一条错误消息。但是,在String中添加ResponseEntity<SomeDto>是不可能的。
问题:我如何在维护签名/合同的同时添加错误消息而不需要引发异常(请参见“有效Java3版本-”项目69:只在异常情况下使用例外情况“)?
我看到的一种(糟糕)方式是向我的所有dtos添加一个错误消息字段(可以由接口指定)。
发布于 2019-05-07 09:57:12
您不需要向单个对象添加错误模型,而是从具有定义错误定义的基类扩展响应模型,这就是我实现它的方法。
static abstract class ApiResponse {
enum Status {
SUCCESS,
FAILURE,
}
@Getter
@Setter
private Status status;
@Getter
@Setter
private String errorMessage;
}
class NamesDto extends ApiResponse {
@Setter
@Getter
String[] names;
}
@GetMapping(value = "namesdto")
public ResponseEntity<ApiResponse> getNames() {
final NamesDto namesDto = new NamesDto();
namesDto.setStatus(ApiResponse.Status.FAILURE);
namesDto.names = new String[]{"john", "doe"};
return ResponseEntity.ok(namesDto);
}
@GetMapping(value = "errordto")
public ResponseEntity<ApiResponse> erroDto() {
final NamesDto namesDto = new NamesDto();
namesDto.setErrorMessage("No names found");
namesDto.setStatus(ApiResponse.Status.FAILURE);
return ResponseEntity.ok(namesDto);
}@Getter/@Setter是从import lombok.*包导入的
发布于 2019-05-07 10:16:40
无论是使用ResponseEntity.badRequest().body(xxx).build()还是抛出异常都可以,只要合同是相同的。
您正在使用lib生成Swagger (例如Springfox)?嗯,在某些情况下它做得很好,但它不能创造奇迹。文档生成不应影响您编写代码的方式。在这种情况下,@ApiResponse是您所需要的。
https://stackoverflow.com/questions/56019799
复制相似问题