簡體   English   中英

Spring消耗Json並使用Hibernate返回值

[英]Spring Consume Json and Return Value using Hibernate

我有一個表Customers和2列customer_id和customer_name。 我想使用json發送ID列表請求並返回相應的客戶名稱。 但是我無法處理dto對象和控制器服務體系結構。

輸入dto:

public class CustomerSearchDto extends BaseDto {
    @ApiModelProperty(
            example = "1",
            value = "Customer Id",
            required = true,
            dataType = "Long"
    )
    private Long id;
}

outputdto:

public class CustomerDto extends BaseDto {

    private Long id;

    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

控制器類別:

@ApiOperation(
            value = "Return Customer",
            response = Customer.class
    )
    @PostMapping(value = Endpoint.RRESOURCE_CUSTOMER_GROUP_BY_ID)
    public ResponseEntity<CustomerDto> getCustomersById(@RequestBody @Validated CustomerSearchDto CustomerSearchDto) {
        CustomerDto CustomerDto = new CustomerDto;
        List<CustomerDto> CustomerDtoList = CustomerService.findCustomerByIds(ids);
        return ResponseEntity.ok(CustomerDto);
    }

服務類方法:

@Transactional
    public List<CustomerDto> findCustomerByIds(List<Long> customerIds) {
        List<Customer> customerList = repository.findCustomerById(CustomerIds);
        return mapper.mapAsList(CustomerList, CustomerDto.class);
    }

控制器類中有一些錯誤。 而且我不確定是否應該同時為輸入和輸出定義不同的dto類?

首先,似乎您應該使用CrudRepository#findAll(java.lang.Iterable<ID>)通過多個ID搜索您的實體。

同樣在您的特定情況下,創建一個單獨的CustomerSearchDto作為id的持有者是多余的-最好只使用long s進行操作。

因此,只需在您的控制器中將List<Long> ids作為參數傳遞(不要忘了將此參數注釋為@RequestBody@RequestParam具體取決於您要在何處指定這些CrudRepository#findAll(ids)在url或正文中),然后調用CrudRepository#findAll(ids)來自您的服務類別。

您無需定義單獨的輸入和輸出類,而是可以根據用例構建和返回Map或List。 同樣,對於輸入,您可以接受列表,其中將包含您要檢索的客戶ID的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM