Как вернуть объект pageableResponseInfo из класса Domain Resolver в класс контроллера? - PullRequest
0 голосов
/ 25 мая 2020

Как вернуть объект pageableResponseInfo из класса DomainArgumentResolver в класс контроллера? Я привел все классы ниже.

Вот объект PageableResponseInfo. Я хочу получить значение invalidSortParam в классе контроллера.

public class PageableResponseInfo  {
    private String invalidSortParam;
    public PageableResponseInfo(String invalidSortParam){
        this.invalidSortParam = invalidSortParam;
    }
    public String getInvalidSortParam() {
        return this.invalidSortParam;
    } 
}

Класс компонента: этот класс выполняет некоторые бизнес-логики c и заполняет объект PageableInfo.

@Component
@ConfigurationProperties
public class DomainArgumentResolver extends SortHandlerMethodArgumentResolver {
    PageableResponseInfo pageableResponseInfo;

    @Override
    public Sort resolveArgument() {
        pageableResponseInfo = new PageableResponseInfo();
        // ...
        if (orders.size() <= paramSize) { 
            pageableResponseInfo.setInvalidSortParam(order.getProperty() + " is not a valid sort parameter");
        }
        // ...  
        return sort;
    } 
}

Контроллер class Ниже приведен класс контроллера, в котором я хочу получить объект PageableResponseInfo через класс DomainArgumentResolver.

@RestController
public class JsonDbController {
    @Autowired
    private DomainArgumentResolver domainArgumentResolver;

    @GetMapping("/all")
    public ResponseEntity<ApiResponse> getAllBooks(Pageable pageable) {
        List<Book> bookList;
        ApiResponse response;
        try {
            if (domainArgumentResolver != null) {
                response = ApiResponse.ofFailure("ji");
            } else {
                bookList = bookService.findAllBooks(pageable);
                response = ApiResponse.ofSuccess(bookList, "All books fetched successfully");
            }
        } 
        catch (InvalidSortException e) {
            response = ApiResponse.fromException(e);
            logger.error("Failed . Cause: {}", e);
        }
        catch (Exception e) {
            response = ApiResponse.ofFailure("Failed to fetch books. Please try again");
            logger.error("Failed to fetch all books. Cause: {}", e);
        }
        return new ResponseEntity<>(response, org.springframework.http.HttpStatus.valueOf(response.getCode()));
    }
}

Сообщите мне, требуется ли какая-либо другая информация.

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете написать метод получения для PageableResponseInfo в своем классе DomainArgumentResolver, чтобы при автоматическом подключении вышеупомянутого класса в вашем контроллере вы могли получить объект объекта PageableResponseInfo.

@Component
@ConfigurationProperties
Public class DomainArgumentResolver extends SortHandlerMethodArgumentResolver {
                PageableResponseInfo pageableResponseInfo;

                @Override
                public Sort resolveArgument() {
                   //your code
                }
                public PageableResponseInfo getPageableResponseInfo(){
                    return this.pageableResponseInfo;
                }
       }

Регулятор отдыха:

@RestController
public class JsonDbController {
    @Autowired
    private DomainArgumentResolver domainArgumentResolver;

    @GetMapping("/all")
    public ResponseEntity<ApiResponse> getAllBooks(Pageable pageable) {
        PageableResponseInfo pageableResponseInfo = domainArgumentResolver.getPageableResponseInfo();
        //other stuff
    }
}

Надеюсь, это то, что вы ищете:)

...