猿问

Spring 使用 Hibernate 使用 Json 并返回值

我有一个表客户和 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;

}

输出到:


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 类?


慕丝7291255
浏览 229回答 2
2回答

一只甜甜圈

首先,您似乎应该使用CrudRepository#findAll(java.lang.Iterable<ID>)多个 ID 来搜索您的实体。同样在您的特定情况下,创建一个单独的CustomerSearchDto作为持有者是多余的id- 最好只使用longs操作。因此,只需List<Long> ids在您的控制器中作为参数传递(不要忘记将此参数注释为@RequestBody或@RequestParam取决于您想在何处指定这些 id - 在 url 中或在正文中),然后CrudRepository#findAll(ids)从您的服务类中调用。

12345678_0001

您不需要定义单独的输入和输出类,相反,您可以根据您的用例构建和返回 Map 或 List。同样对于输入,您可以接受 List ,其中包含您要检索的客户 ID 列表。
随时随地看视频慕课网APP

相关分类

Java
我要回答