[英]Spring MVC @ResponseBody return list is not proper json reponse using 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.