Java使用类型响应API问题

krcsximq  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(130)

在API响应中使用泛型类型有哪些问题?它是否会导致任何编码错误、问题或兼容性问题?目前使用Java 8,Sping Boot 3,React 17。我更喜欢使用稳定的类类型。
Generic type as parameter in Java Method

  1. private static <T> List<T> pushBack(List<T> list, Class<T> typeKey) throws Exception {
  2. list.add(typeKey.getConstructor().newInstance());
  3. return list;
  4. }

我在这里看到一个问题线程,https://github.com/swagger-api/swagger-core/issues/498

kmynzznz

kmynzznz1#

在Java中使用泛型是没有问题的,除非它实现得很好。我看到很多项目在Sping Boot 中使用响应 Package 器进行API调用。
下面是一个在响应实体中使用泛型的示例。

  1. @Builder
  2. @NoArgsConstructor
  3. @Data
  4. @AllArgsConstructor
  5. public class Response<T extends Object> {
  6. private LocalDateTime timestamp;
  7. private int status;
  8. private Boolean isSuccess;
  9. private String message;
  10. private T data;
  11. }

它是一个 Package 器类,其中每个API响应将包含以下字段

  1. public class ResponseWrapper {
  2. public static <T extends Object> ResponseEntity<T> generateResponse(HttpStatus status, boolean isSuccess, String message, T responseObj) {
  3. Response<Object> response = Response.builder().timestamp(LocalDateTime.now()).status(status.value()).isSuccess(isSuccess).message(message).data(responseObj).build();
  4. return new ResponseEntity<T>((T) response, status);
  5. }
  6. public static <T extends Object> ResponseEntity<T> ok(T responseObj) {
  7. return generateResponse(HttpStatus.OK, true, "", responseObj);
  8. }
  9. public static ResponseEntity<String> message(String message) {
  10. return generateResponse(HttpStatus.OK, true, message, "");
  11. }
  12. public static ResponseEntity<String> error(String message, HttpStatus status) {
  13. return generateResponse(status, false, message, "");
  14. }
  15. }

这是需要从控制器调用的 Package 器

  1. @GetMapping(value = "/dummy/users", produces = { Api.V10 })
  2. public ResponseEntity<List<User>> getAllDummyUsers() {
  3. return ResponseWrapper.ok(userService.getAllUsers());
  4. }

希望我能理解这个问题,并能提供答案。

展开查看全部

相关问题