From 582127a789a9069f2de33951ebee6e3f10f0a41f Mon Sep 17 00:00:00 2001 From: marcelmeyer Date: Wed, 6 Sep 2023 16:14:44 +0100 Subject: [PATCH] Updating spring dependencies Updating hateos dependencies --- .../logging/RestControllerAspectLogging.java | 5 --- .../web/BankAccessController.java | 24 ++++++------ .../web/BankAccountAnalyticsController.java | 8 ++-- .../web/BankAccountController.java | 22 +++++------ .../multibanking/web/BankController.java | 20 +++++----- .../multibanking/web/BookingController.java | 36 ++++++++--------- .../web/ConsentAuthorisationController.java | 21 +++++----- .../multibanking/web/ConsentController.java | 39 ++++++++++--------- .../multibanking/web/ContractController.java | 11 +++--- .../web/CustomRulesController.java | 24 ++++++------ .../web/DirectAccessControllerV2.java | 14 +++---- .../web/StandingOrderController.java | 13 ++++--- .../multibanking/web/model/BankAccessTO.java | 2 +- .../multibanking/web/model/BankAccountTO.java | 2 +- .../multibanking/web/model/BankTO.java | 2 +- .../multibanking/web/model/BookingTO.java | 2 +- .../multibanking/web/model/ContractTO.java | 2 +- .../multibanking/web/model/RuleTO.java | 2 +- 18 files changed, 124 insertions(+), 125 deletions(-) diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/logging/RestControllerAspectLogging.java b/multibanking-server/src/main/java/de/adorsys/multibanking/logging/RestControllerAspectLogging.java index 1af6cb62f..893506056 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/logging/RestControllerAspectLogging.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/logging/RestControllerAspectLogging.java @@ -1,7 +1,6 @@ package de.adorsys.multibanking.logging; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.reflect.FieldUtils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; @@ -9,8 +8,6 @@ import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Marker; import org.slf4j.MarkerFactory; -import org.springframework.hateoas.Resource; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.context.request.RequestContextHolder; @@ -18,8 +15,6 @@ import javax.servlet.http.HttpServletRequest; import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.util.List; @Slf4j @Aspect diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccessController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccessController.java index ff159ceb5..275b979e4 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccessController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccessController.java @@ -20,9 +20,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; -import org.springframework.hateoas.Resource; -import org.springframework.hateoas.Resources; import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -34,8 +34,8 @@ import java.util.List; import static java.util.stream.Collectors.toList; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @Timed("bank-access") @Tag(name = "Bankaccess") @@ -79,26 +79,26 @@ public ResponseEntity createBankAccess(@RequestBody BankAccessTO bankAccess) { e.getAuthorisationId())).withSelfRel()); links.add(linkTo(methodOn(ConsentAuthorisationController.class).transactionAuthorisation(e.getConsentId(), e.getAuthorisationId(), null)).withRel("transactionAuthorisation")); - return ResponseEntity.accepted().body(new Resource<>(consentAuthorisationMapper.toUpdateAuthResponseTO(e.getResponse()), links)); + return ResponseEntity.accepted().body(EntityModel.of(consentAuthorisationMapper.toUpdateAuthResponseTO(e.getResponse()), links)); } } @Operation(description = "Read bank accesses", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping - public Resources> getBankAccesses() { + public CollectionModel> getBankAccesses() { if (!userRepository.exists(principal.getName())) { - return new Resources<>(Collections.emptyList()); + return CollectionModel.empty(); } List accessEntities = bankAccessRepository.findByUserId(principal.getName()); - return new Resources<>(mapToResources(accessEntities)); + return CollectionModel.of(mapToEntityModels(accessEntities)); } @Operation(description = "Read bank access", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping("/{accessId}") - public Resource getBankAccess(@PathVariable String accessId) { + public EntityModel getBankAccess(@PathVariable String accessId) { BankAccessEntity bankAccessEntity = bankAccessRepository.findByUserIdAndId(principal.getName(), accessId) .orElseThrow(() -> new ResourceNotFoundException(BankAccessEntity.class, accessId)); @@ -130,14 +130,14 @@ public HttpEntity deleteBankAccess(@PathVariable String accessId) { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - private List> mapToResources(List accessEntities) { + private List> mapToEntityModels(List accessEntities) { return accessEntities.stream() .map(this::mapToResource) .collect(toList()); } - private Resource mapToResource(BankAccessEntity accessEntity) { - return new Resource<>(bankAccessMapper.toBankAccessTO(accessEntity), + private EntityModel mapToResource(BankAccessEntity accessEntity) { + return EntityModel.of(bankAccessMapper.toBankAccessTO(accessEntity), linkTo(methodOn(BankAccessController.class).getBankAccess(accessEntity.getId())).withSelfRel(), linkTo(methodOn(BankAccountController.class).getBankAccounts(accessEntity.getId())).withRel("accounts")); } diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccountAnalyticsController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccountAnalyticsController.java index f996c7b9e..9bcf98fb2 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccountAnalyticsController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccountAnalyticsController.java @@ -16,7 +16,7 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.hateoas.Resource; +import org.springframework.hateoas.EntityModel; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -41,8 +41,8 @@ public class BankAccountAnalyticsController { @Operation(description = "Read account analytics", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping - public Resource getAccountAnalytics(@PathVariable String accessId, - @PathVariable String accountId) { + public EntityModel getAccountAnalytics(@PathVariable String accessId, + @PathVariable String accountId) { if (!bankAccessRepository.exists(accessId)) { throw new ResourceNotFoundException(BankAccessEntity.class, accessId); } @@ -60,6 +60,6 @@ public Resource getAccountAnalytics(@PathVariable String accessId, "user-id: " + principal.getName() )); - return new Resource<>(analyticsMapper.toAnalyticsTO(accountAnalyticsEntity)); + return EntityModel.of(analyticsMapper.toAnalyticsTO(accountAnalyticsEntity)); } } diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccountController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccountController.java index 6eafa7cea..3a07a819e 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccountController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankAccountController.java @@ -23,9 +23,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; -import org.springframework.hateoas.Resource; -import org.springframework.hateoas.Resources; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -36,8 +36,8 @@ import static de.adorsys.multibanking.domain.ScaStatus.FINALISED; import static java.util.stream.Collectors.toList; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @Timed("bank-account") @Tag(name = "Bankaccount") @@ -62,15 +62,15 @@ public class BankAccountController { @Content(schema = @Schema(implementation = Messages.class)) }) @GetMapping - public Resources> getBankAccounts(@PathVariable String accessId) { + public CollectionModel> getBankAccounts(@PathVariable String accessId) { List bankAccounts = bankAccountService.getBankAccounts(principal.getName(), accessId); - return new Resources<>(mapToResources(bankAccounts, accessId)); + return CollectionModel.of(mapToResources(bankAccounts, accessId)); } @Operation(description = "Read bank account", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping("/{accountId}") - public Resource getBankAccount(@PathVariable String accessId, + public EntityModel getBankAccount(@PathVariable String accessId, @PathVariable("accountId") String accountId) { if (!bankAccessRepository.exists(accessId)) { throw new ResourceNotFoundException(BankAccessEntity.class, accessId); @@ -111,18 +111,18 @@ public ResponseEntity syncBookings(@PathVariable String accessId, @PathVariable e.getAuthorisationId())).withSelfRel()); links.add(linkTo(methodOn(ConsentAuthorisationController.class).transactionAuthorisation(e.getConsentId(), e.getAuthorisationId(), null)).withRel("transactionAuthorisation")); - return ResponseEntity.accepted().body(new Resource<>(consentAuthorisationMapper.toUpdateAuthResponseTO(e.getResponse()), links)); + return ResponseEntity.accepted().body(EntityModel.of(consentAuthorisationMapper.toUpdateAuthResponseTO(e.getResponse()), links)); } } - private List> mapToResources(List accountEntities, String accessId) { + private List> mapToResources(List accountEntities, String accessId) { return accountEntities.stream() .map(accountEntity -> mapToResource(accountEntity, accessId)) .collect(toList()); } - private Resource mapToResource(BankAccountEntity accountEntity, String accessId) { - return new Resource<>(bankAccountMapper.toBankAccountTO(accountEntity), + private EntityModel mapToResource(BankAccountEntity accountEntity, String accessId) { + return EntityModel.of(bankAccountMapper.toBankAccountTO(accountEntity), linkTo(methodOn(BankAccountController.class).getBankAccount(accessId, accountEntity.getId())).withSelfRel(), linkTo(methodOn(BankAccessController.class).getBankAccess(accessId)).withRel("bankAccess"), linkTo(methodOn(BankAccountAnalyticsController.class).getAccountAnalytics(accessId, diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankController.java index d63dec77f..6f1ba1e20 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BankController.java @@ -11,8 +11,8 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.hateoas.Resource; -import org.springframework.hateoas.Resources; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -22,8 +22,8 @@ import java.util.List; import static java.util.stream.Collectors.toList; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @Tag(name = "Bank") @RequiredArgsConstructor @@ -38,7 +38,7 @@ public class BankController { @Operation(description = "get bank by bank code") @GetMapping(value = "/{bankCode}") - public Resource getBank(@PathVariable String bankCode) { + public EntityModel getBank(@PathVariable String bankCode) { long start = System.currentTimeMillis(); Exception exception = null; @@ -56,8 +56,8 @@ public Resource getBank(@PathVariable String bankCode) { @Timed("bank") @Operation(description = "find bank") @GetMapping - public Resources> searchBank(@RequestParam String query) { - return new Resources<>(mapToResources(bankService.search(query))); + public CollectionModel> searchBank(@RequestParam String query) { + return CollectionModel.of(mapToResources(bankService.search(query))); } @Timed("bank") @@ -73,14 +73,14 @@ public HttpEntity uploadBanks(@RequestParam MultipartFile banksFile) { } } - private List> mapToResources(List entities) { + private List> mapToResources(List entities) { return entities.stream() .map(this::mapToResource) .collect(toList()); } - private Resource mapToResource(BankEntity entity) { - return new Resource<>(bankMapper.toBankTO(entity), + private EntityModel mapToResource(BankEntity entity) { + return EntityModel.of(bankMapper.toBankTO(entity), linkTo(methodOn(BankController.class).getBank(entity.getBankCode())).withSelfRel()); } diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BookingController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BookingController.java index b20b2c47b..ad705e7b4 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/BookingController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/BookingController.java @@ -21,8 +21,8 @@ import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.data.web.PagedResourcesAssembler; -import org.springframework.hateoas.Resource; -import org.springframework.hateoas.Resources; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.http.HttpEntity; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -32,8 +32,8 @@ import java.util.List; import java.util.Optional; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @Timed("booking") @Tag(name = "Booking") @@ -55,13 +55,13 @@ public class BookingController { @Operation(description = "Read account bookings", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping - public Resources getBookings(@PathVariable String accessId, - @PathVariable String accountId, - @RequestParam(required = false) BankApiTO bankApi, - @RequestParam(required = false) List ids, - @PageableDefault(size = 20, sort = "valutaDate", direction = + public CollectionModel getBookings(@PathVariable String accessId, + @PathVariable String accountId, + @RequestParam(required = false) BankApiTO bankApi, + @RequestParam(required = false) List ids, + @PageableDefault(size = 20, sort = "valutaDate", direction = Sort.Direction.DESC) Pageable pageable, - PagedResourcesAssembler assembler) { + PagedResourcesAssembler assembler) { checkBankAccountExists(accessId, accountId); if (bankAccountRepository.getSyncStatus(accountId) == BankAccount.SyncStatus.SYNC) { @@ -71,20 +71,20 @@ public Resources getBookings(@PathVariable String accessId, return Optional.ofNullable(ids) .map(strings -> { Iterable bookingEntities = bookingService.getBookingsById(principal.getName(), ids); - return new Resources<>(bookingMapper.toBookingTOs(bookingEntities)); + return CollectionModel.of(bookingMapper.toBookingTOs(bookingEntities)); }) .orElseGet(() -> { Page bookingEntities = bookingService.getBookingsPageable(pageable, principal.getName(), accessId, accountId, bankApiMapper.toBankApi(bankApi)); - return assembler.toResource(bookingEntities.map(bookingMapper::toBookingTO)); + return assembler.toModel(bookingEntities.map(bookingMapper::toBookingTO)); }); } @Operation(description = "Read account bookings search index", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping("/index") - public Resource getBookingsIndex(@PathVariable String accessId, - @PathVariable String accountId) { + public EntityModel getBookingsIndex(@PathVariable String accessId, + @PathVariable String accountId) { checkBankAccountExists(accessId, accountId); if (bankAccountRepository.getSyncStatus(accountId) == BankAccount.SyncStatus.SYNC) { @@ -94,7 +94,7 @@ public Resource getBookingsIndex(@PathVariable String acces BookingsIndexEntity bookingsIndexEntity = bookingService.getSearchIndex(principal.getName(), accountId) .orElseThrow(() -> new ResourceNotFoundException(BookingsIndexEntity.class, accountId)); - return new Resource<>(bookingsIndexEntity); + return EntityModel.of(bookingsIndexEntity); } @Operation(description = "Download bookings", security = { @@ -111,7 +111,7 @@ public HttpEntity downloadBookings(@PathVariable String accessId, @PathV @Operation(description = "Read booking", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping("/{bookingId}") - public Resource getBooking(@PathVariable String accessId, @PathVariable String accountId, + public EntityModel getBooking(@PathVariable String accessId, @PathVariable String accountId, @PathVariable String bookingId) { checkBankAccountExists(accessId, accountId); @@ -130,8 +130,8 @@ private void checkBankAccountExists(String accessId, String accountId) { } } - private Resource mapToResource(BookingEntity entity, String accessId, String accountId) { - return new Resource<>(bookingMapper.toBookingTO(entity), + private EntityModel mapToResource(BookingEntity entity, String accessId, String accountId) { + return EntityModel.of(bookingMapper.toBookingTO(entity), linkTo(methodOn(BookingController.class).getBooking(accessId, accountId, entity.getId())) .withSelfRel()); } diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/ConsentAuthorisationController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/ConsentAuthorisationController.java index 297ef2136..02cbc1986 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/ConsentAuthorisationController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/ConsentAuthorisationController.java @@ -8,13 +8,13 @@ import de.adorsys.multibanking.web.model.UpdateAuthResponseTO; import de.adorsys.multibanking.web.model.UpdatePsuAuthenticationRequestTO; import io.micrometer.core.annotation.Timed; -import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.iban4j.Iban; +import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; -import org.springframework.hateoas.Resource; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -24,8 +24,8 @@ import static de.adorsys.multibanking.domain.BankApi.HBCI; import static de.adorsys.multibanking.domain.ScaApproach.*; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @Timed("consent-authorisation") @Tag(name = "Consent authorisation") @@ -41,7 +41,7 @@ public class ConsentAuthorisationController { @Operation(description = "Update authorisation (authenticate user)") @PutMapping("/updatePsuAuthentication") - public ResponseEntity> updateAuthentication(@PathVariable String consentId, + public ResponseEntity> updateAuthentication(@PathVariable String consentId, @PathVariable String authorisationId, @RequestBody @Valid UpdatePsuAuthenticationRequestTO updatePsuAuthenticationRequestTO) { String bankCode = Iban.valueOf(consentService.getInternalConsent(consentId).getPsuAccountIban()).getBankCode(); @@ -55,7 +55,7 @@ public ResponseEntity> updateAuthentication(@Path @Operation(description = "Update authorisation (select SCA method)") @PutMapping("/selectPsuAuthenticationMethod") - public ResponseEntity> selectAuthenticationMethod(@PathVariable String consentId, + public ResponseEntity> selectAuthenticationMethod(@PathVariable String consentId, @PathVariable String authorisationId, @RequestBody @Valid SelectPsuAuthenticationMethodRequestTO selectPsuAuthenticationMethodRequest) { String bankCode = Iban.valueOf(consentService.getInternalConsent(consentId).getPsuAccountIban()).getBankCode(); @@ -68,7 +68,7 @@ public ResponseEntity> selectAuthenticationMethod @Operation(description = "Update authorisation (authorize transaction)") @PutMapping("/transactionAuthorisation") - public ResponseEntity> transactionAuthorisation(@PathVariable String consentId, + public ResponseEntity> transactionAuthorisation(@PathVariable String consentId, @PathVariable String authorisationId, @RequestBody @Valid TransactionAuthorisationRequestTO transactionAuthorisationRequest) { String bankCode = Iban.valueOf(consentService.getInternalConsent(consentId).getPsuAccountIban()).getBankCode(); @@ -81,7 +81,7 @@ public ResponseEntity> transactionAuthorisation(@ @Operation(description = "Get consent authorisation status") @GetMapping - public ResponseEntity> getConsentAuthorisationStatus(@PathVariable String consentId, + public ResponseEntity> getConsentAuthorisationStatus(@PathVariable String consentId, @PathVariable String authorisationId) { String bankCode = Iban.valueOf(consentService.getInternalConsent(consentId).getPsuAccountIban()).getBankCode(); @@ -90,7 +90,7 @@ public ResponseEntity> getConsentAuthorisationSta return ResponseEntity.ok(mapToResource(updateAuthResponse, consentId, authorisationId, bankCode)); } - private Resource mapToResource(UpdateAuthResponse response, String consentId, + private EntityModel mapToResource(UpdateAuthResponse response, String consentId, String authorisationId, String bankCode) { List links = new ArrayList<>(); links.add(linkTo(methodOn(ConsentAuthorisationController.class).getConsentAuthorisationStatus(consentId, @@ -101,7 +101,8 @@ private Resource mapToResource(UpdateAuthResponse response appendEmbeddedAuthLinks(response, consentId, authorisationId, links); } - return new Resource<>(consentAuthorisationMapper.toUpdateAuthResponseTO(response), links); + return + EntityModel.of(consentAuthorisationMapper.toUpdateAuthResponseTO(response), links); } private void appendEmbeddedAuthLinks(UpdateAuthResponse response, String consentId, String authorisationId, diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/ConsentController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/ConsentController.java index aa5600010..61f0b941f 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/ConsentController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/ConsentController.java @@ -15,9 +15,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.iban4j.Iban; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; -import org.springframework.hateoas.Resource; -import org.springframework.hateoas.Resources; +import org.springframework.hateoas.LinkRelation; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -31,8 +32,8 @@ import java.util.Optional; import static java.util.stream.Collectors.toList; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @Timed("consent") @Tag(name = "Consent") @@ -51,7 +52,7 @@ public class ConsentController { @Operation(description = "Create new consent") @PostMapping - public ResponseEntity> createConsent(@Valid @RequestBody ConsentTO consent, + public ResponseEntity> createConsent(@Valid @RequestBody ConsentTO consent, @RequestParam(required = false) BankApiTO bankApi) { Consent consentInput = consentMapper.toConsent(consent); CreateConsentResponse createConsentResponse = consentService.createConsent(consentInput, @@ -68,33 +69,33 @@ public ResponseEntity> createConsent(@Valid @R @Operation(description = "Read user consents", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping - public Resources> getConsents() { + public CollectionModel> getConsents() { List consents = bankAccessRepository.findByUserId(principal.getName()) .stream() .map(bankAccessEntity -> consentService.getConsent(bankAccessEntity.getConsentId())) .collect(toList()); - return new Resources<>(mapToResources(consents)); + return CollectionModel.of(mapToResources(consents)); } @Operation(description = "Read consent", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping("/{consentId}") - public Resource getConsent(@PathVariable("consentId") String consentId) { + public EntityModel getConsent(@PathVariable("consentId") String consentId) { return mapToResource(consentService.getConsent(consentId)); } @Operation(description = "Read consent status", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping("/{consentId}/status") - public Resource getConsentStatus(@PathVariable("consentId") String consentId) { + public EntityModel getConsentStatus(@PathVariable("consentId") String consentId) { return mapToResource(consentService.getConsentStatus(consentId)); } @Operation(description = "Read consent", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping("redirect/{redirectId}") - public Resource getConsentByRedirectId(@PathVariable("redirectId") String redirectId) { + public EntityModel getConsentByRedirectId(@PathVariable("redirectId") String redirectId) { return mapToResource(consentService.getConsentByRedirectId(redirectId)); } @@ -115,22 +116,22 @@ public ResponseEntity submitAuthorisationCode(@PathVariable String consent return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - private List> mapToResources(List consents) { + private List> mapToResources(List consents) { return consents.stream() .map(this::mapToResource) .collect(toList()); } - private Resource mapToResource(Consent consent) { - return new Resource<>(consentMapper.toConsentTO(consent), + private EntityModel mapToResource(Consent consent) { + return EntityModel.of(consentMapper.toConsentTO(consent), linkTo(methodOn(ConsentController.class).getConsent(consent.getConsentId())).withSelfRel()); } - private Resource mapToResource(ConsentStatus consentStatus) { - return new Resource<>(consentMapper.toConsentStatusTO(consentStatus)); + private EntityModel mapToResource(ConsentStatus consentStatus) { + return EntityModel.of(consentMapper.toConsentStatusTO(consentStatus)); } - private Resource mapToResource(CreateConsentResponse createConsentResponse, + private EntityModel mapToResource(CreateConsentResponse createConsentResponse, String bankCode) { String consentId = createConsentResponse.getConsentId(); @@ -141,12 +142,12 @@ private Resource mapToResource(CreateConsentResponse cr .ifPresent(authorisationId -> links.add(linkTo(methodOn(ConsentAuthorisationController.class).getConsentAuthorisationStatus(consentId, authorisationId)).withRel("authorisationStatus"))); Optional.ofNullable(createConsentResponse.getRedirectUrl()) - .ifPresent(redirectUrl -> links.add(new Link(redirectUrl, "redirectUrl"))); + .ifPresent(redirectUrl -> links.add(Link.of(redirectUrl, LinkRelation.of("redirectUrl")))); Optional.ofNullable(createConsentResponse.getOauthRedirectUrl()) - .ifPresent(oauthUrl -> links.add(new Link(oauthUrl, "oauthRedirectUrl"))); + .ifPresent(oauthUrl -> links.add(Link.of(oauthUrl, LinkRelation.of("oauthRedirectUrl")))); - return new Resource<>(consentMapper.toCreateConsentResponseTO(createConsentResponse), links); + return EntityModel.of(consentMapper.toCreateConsentResponseTO(createConsentResponse), links); } } diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/ContractController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/ContractController.java index 430424360..5d4cece9c 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/ContractController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/ContractController.java @@ -16,7 +16,7 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.hateoas.Resources; +import org.springframework.hateoas.CollectionModel; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -25,8 +25,9 @@ import java.security.Principal; import java.util.List; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; + @Timed("contract") @Tag(name = "Contract") @@ -45,7 +46,7 @@ public class ContractController { @Operation(description = "Read account contracts", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping - public Resources getContracts(@PathVariable String accessId, @PathVariable String accountId) { + public CollectionModel getContracts(@PathVariable String accessId, @PathVariable String accountId) { if (!bankAccessRepository.exists(accessId)) { throw new ResourceNotFoundException(BankAccessEntity.class, accessId); } @@ -59,7 +60,7 @@ public Resources getContracts(@PathVariable String accessId, @PathVa List contractEntities = contractRepository.findByUserIdAndAccountId(principal.getName(), accountId); - return new Resources<>( + return CollectionModel.of( contractMapper.toContractTOs(contractEntities), linkTo(methodOn(ContractController.class).getContracts(accessId, accountId)).withSelfRel() ); diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/CustomRulesController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/CustomRulesController.java index 2e9a79726..d438d373e 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/CustomRulesController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/CustomRulesController.java @@ -20,8 +20,8 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.data.web.PagedResourcesAssembler; -import org.springframework.hateoas.Resource; -import org.springframework.hateoas.Resources; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -32,8 +32,8 @@ import java.util.List; import static java.util.stream.Collectors.toList; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @Timed("custom-rule") @Tag(name = "Custom rule") @@ -59,7 +59,7 @@ public HttpEntity createRule(@RequestBody RuleTO rule) { @Operation(description = "Read user custom rule", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping("{ruleId}") - public Resource getRule(@PathVariable String ruleId) { + public EntityModel getRule(@PathVariable String ruleId) { RuleEntity ruleEntity = rulesRepository.findByRuleId(ruleId) .orElseThrow(() -> new ResourceNotFoundException(RuleEntity.class, ruleId)); @@ -87,17 +87,17 @@ public HttpEntity deleteRule(@PathVariable String ruleId) { @Operation(description = "Read user custom rules", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping - public Resources> getRules(@PageableDefault(size = 20) Pageable pageable, + public CollectionModel> getRules(@PageableDefault(size = 20) Pageable pageable, PagedResourcesAssembler assembler) { Page pageableResult = rulesRepository.findAllPageable(pageable); - return assembler.toResource(pageableResult.map(ruleMapper::toRuleTO)); + return assembler.toModel(pageableResult.map(ruleMapper::toRuleTO)); } @Operation(description = "Search user custom rules", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping("/search") - public Resources> searchRules(@RequestParam String query) { - return new Resources<>(mapToResources(rulesRepository.search(query))); + public CollectionModel> searchRules(@RequestParam String query) { + return CollectionModel.of(mapToResources(rulesRepository.search(query))); } @Operation(description = "Download user custom rules", security = { @@ -113,14 +113,14 @@ public HttpEntity downloadRules() throws JsonProcessingExce .body(new InputStreamResource(new ByteArrayInputStream(objectMapper.writeValueAsBytes(rules)))); } - private List> mapToResources(List entities) { + private List> mapToResources(List entities) { return entities.stream() .map(this::mapToResource) .collect(toList()); } - private Resource mapToResource(RuleEntity entity) { - return new Resource<>(ruleMapper.toRuleTO(entity), + private EntityModel mapToResource(RuleEntity entity) { + return EntityModel.of(ruleMapper.toRuleTO(entity), linkTo(methodOn(CustomRulesController.class).getRule(entity.getId())).withSelfRel()); } diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/DirectAccessControllerV2.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/DirectAccessControllerV2.java index 2afdf85b2..ab8b48a37 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/DirectAccessControllerV2.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/DirectAccessControllerV2.java @@ -23,8 +23,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; -import org.springframework.hateoas.Resource; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -38,8 +38,8 @@ import java.util.UUID; import static de.adorsys.multibanking.domain.ScaStatus.SCAMETHODSELECTED; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @Timed("direct-access2") @Tag(name = "Direct access v2") @@ -204,15 +204,15 @@ private ResponseEntity createLoadBookingsResponse(BankAcco return new ResponseEntity<>(loadBookingsResponse, HttpStatus.OK); } - private ResponseEntity> createChallengeResponse(UpdateAuthResponse response, - String consentId, - String authorisationId) { + private ResponseEntity> createChallengeResponse(UpdateAuthResponse response, + String consentId, + String authorisationId) { List links = new ArrayList<>(); links.add(linkTo(methodOn(ConsentAuthorisationController.class).getConsentAuthorisationStatus(consentId, authorisationId)).withSelfRel()); links.add(linkTo(methodOn(ConsentAuthorisationController.class).transactionAuthorisation(consentId, authorisationId, null)).withRel("transactionAuthorisation")); - return ResponseEntity.accepted().body(new Resource<>(consentAuthorisationMapper.toUpdateAuthResponseTO(response), links)); + return ResponseEntity.accepted().body(EntityModel.of(consentAuthorisationMapper.toUpdateAuthResponseTO(response), links)); } @Data diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/StandingOrderController.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/StandingOrderController.java index 31d02be2f..3c1134112 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/StandingOrderController.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/StandingOrderController.java @@ -14,7 +14,7 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.hateoas.Resources; +import org.springframework.hateoas.CollectionModel; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -22,8 +22,9 @@ import java.security.Principal; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; + @Timed("standing-order") @Tag(name = "Standing order") @@ -41,8 +42,8 @@ public class StandingOrderController { @Operation(description = "Read account standing orders", security = { @SecurityRequirement(name = "multibanking_auth", scopes = "openid")}) @GetMapping - public Resources getStandingOrders(@PathVariable String accessId, - @PathVariable String accountId) { + public CollectionModel getStandingOrders(@PathVariable String accessId, + @PathVariable String accountId) { if (!bankAccessRepository.exists(accessId)) { throw new ResourceNotFoundException(BankAccessEntity.class, accessId); } @@ -53,7 +54,7 @@ public Resources getStandingOrders(@PathVariable String acc throw new SyncInProgressException(accountId); } - return new Resources<>( + return CollectionModel.of( standingOrderRepository.findByUserIdAndAccountId(principal.getName(), accountId), linkTo(methodOn(StandingOrderController.class).getStandingOrders(accessId, accountId)).withSelfRel() ); diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankAccessTO.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankAccessTO.java index 567bda057..7ab07db46 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankAccessTO.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankAccessTO.java @@ -2,7 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import org.springframework.hateoas.core.Relation; +import org.springframework.hateoas.server.core.Relation; import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY; diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankAccountTO.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankAccountTO.java index 1253a6628..abbdb9b19 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankAccountTO.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankAccountTO.java @@ -2,7 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import org.springframework.hateoas.core.Relation; +import org.springframework.hateoas.server.core.Relation; import javax.validation.constraints.NotNull; import java.time.LocalDateTime; diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankTO.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankTO.java index 2fd820d8f..2295ab8a6 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankTO.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BankTO.java @@ -2,7 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import org.springframework.hateoas.core.Relation; +import org.springframework.hateoas.server.core.Relation; @Schema(name = "Bank") @Relation(collectionRelation = "bankList") diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BookingTO.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BookingTO.java index f3fdc4d31..44edf81b8 100755 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BookingTO.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/BookingTO.java @@ -3,7 +3,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.ToString; -import org.springframework.hateoas.core.Relation; +import org.springframework.hateoas.server.core.Relation; import java.math.BigDecimal; import java.time.LocalDate; diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/ContractTO.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/ContractTO.java index 6a4121382..57639cea7 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/ContractTO.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/ContractTO.java @@ -2,7 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import org.springframework.hateoas.core.Relation; +import org.springframework.hateoas.server.core.Relation; import java.math.BigDecimal; diff --git a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/RuleTO.java b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/RuleTO.java index 2b1aef003..05774cc6f 100644 --- a/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/RuleTO.java +++ b/multibanking-server/src/main/java/de/adorsys/multibanking/web/model/RuleTO.java @@ -2,7 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import org.springframework.hateoas.core.Relation; +import org.springframework.hateoas.server.core.Relation; @Schema(name = "AnalyticsRule") @Relation(collectionRelation = "ruleList")