繁体   English   中英

Spring React中的实体对象到数据传输对象(DTO)

[英]Entity object to Data Transfer Object (DTO) in Spring React

我有订单模型

@Document(collection="order")
public class Order {
  @Id
  String id;

  String desc;

  String orgId;
}

每个OrgId都与Organization Object相关联

@Document(collection="organization")
public class Organization {

    @Id
    String id;

    String desc;

    String ownerEmail;
}

我的订单DTO是

public class OrderDTO {

    String id;

    String desc;

    Organization org;

}

我想在Spring反应中将Flux和Mono用于OrderDTO。

@RestController
@RequestMapping("orders")
public class OrderController {

    @Autowired
  private OrderService service;

    @Autowired
  private OrganizationService orgService;

    @GetMapping
    public Flux<OrderDTO> findAll() {
        return service.findAll(); // wanted step for Flux<Order> to Flux<OrderDTO>
    }

    @GetMapping("/{id}")
    public Mono<OrderDTO> findOne(@PathVariable String id) {
        return service.findOne(id); // wanted step for Mono<Order> to Mono<OrderDTO>
    }

}

首先,尝试理清您的想法和步骤。

  1. 创建模型OrderOrganization
  2. 根据数据库实现为每种模型创建存储库 ,使您的OrderRepositoryOrganizationRepository extendsReactiveMongoRepositoryReactiveCrudRepository

     import org.springframework.data.mongodb.repository.ReactiveMongoRepository; import org.springframework.stereotype.Repository; @Repository public interface OrderRepository extends ReactiveMongoRepository<Order, String> { // Spring Boot automatically add an implementation of this interface called SimpleOrderRepository at runtime. // So you get all the CRUD methods on the Document readily available to you without needing to write any code. Following are some of the methods available from SimpleReactiveMongoRepository - // reactor.core.publisher.Flux<T> findAll(); // reactor.core.publisher.Mono<T> findById(ID id); // <S extends T> reactor.core.publisher.Mono<S> save(S entity); // reactor.core.publisher.Mono<Void> delete(T entity); // Notice that all the methods are asynchronous and return a publisher in the form of a Flux or a Mono type. } @Repository public interface OrganizationRepository extends ReactiveMongoRepository<Organization, String> { } 
  3. 创建控制器端点

     @RestController @RequestMapping("orders") public class OrderController { @Autowired private OrderRepository orderRepository; @GetMapping public Flux<Order> getAllOrders() { return orderRepository.findAll(); } @PostMapping public Mono<Tweet> createOrder(@Valid @RequestBody Order order) { return orderRepository.save(order); } @GetMapping("{id}") public Mono<ResponseEntity<Order>> getOrderById(@PathVariable(value = "id") String orderId) { return orderRepository.findById(orderId) .map(savedOrder -> ResponseEntity.ok(savedOrder)) .defaultIfEmpty(ResponseEntity.notFound().build()); } @PutMapping("{id}") public Mono<ResponseEntity<Order>> updateTweet(@PathVariable(value = "id") String orderId, @Valid @RequestBody Order order) { return orderRepository.findById(orderId) .flatMap(existingOrder -> { existingOrder.setDesc(order.getDesc()); return orderRepository.save(existingOrder); }) .map(updatedOrder -> new ResponseEntity<>(updatedOrder, HttpStatus.OK)) .defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND)); } @DeleteMapping("{id}") public Mono<ResponseEntity<Void>> deleteOrder(@PathVariable(value = "id") String orderId) { return orderRepository.findById(orderId) .flatMap(existingOrder -> orderRepository.delete(existingOrder) .then(Mono.just(new ResponseEntity<Void>(HttpStatus.OK))) ) .defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND)); } // Orders are Sent to the client as Server Sent Events @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<Order> streamAllOrders() { return orderRepository.findAll(); } } 

查看示例 && doc以获得更多说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM