![](/img/trans.png)
[英]Pattern for JPA: Generating Data Transfer Object DTO from Entity and merging DTO to database
[英]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>
}
}
首先,尝试理清您的想法和步骤。
Order
和Organization
根据数据库实现为每种模型创建存储库 ,使您的OrderRepository
和OrganizationRepository
extends
为ReactiveMongoRepository
或ReactiveCrudRepository
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> { }
创建控制器端点
@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(); } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.