我不熟悉反应式编程。为了得到我的手,我试图建立一个简单的RESTAPI,但与请求验证和数据库操作。
以下是我想做的步骤。
注意:请求和响应由类(UserRequest和UserResponse)表示。DB=使用无功驱动程序的Mongo。
我已经完成了验证工作,但现在我不知道如何继续以及反应式编程的正确方法是什么。
@Component
public class UserController {
@Autowired
private UserRepository userRepository; // repo has find by id method which returns Mono<User>
public Mono<ServerResponse> handleUserRequest(ServerRequest serverRequest) {
Mono<UserRequest> request = validateRequest(serverRequest);
// what should i do here like now i would like to fetch user from db
return ServerResponse.ok().body("Welcome", String.class);
// how would i return "Welcome <username>";
}
private Mono<UserRequest> validateRequest(ServerRequest request) {
Mono<UserRequest> userRequest = Mono.just(new UserRequest());
Mono<UserRequest> validateUser = userRequest
.map(req -> { //validate id
Optional<String> userid = request.queryParam("userid");
if (user.isPresent() && ObjectId.isValid(userid.get())) {
return req.setUserid(userid.get());
}
throw new RequestEntityValidationException("Invalid user");
});
return validateUser;
}
}
还有没有类似的并排教程,在命令式和反应式中分别显示一般代码片段。
使用功能性反应HTTPendpoint时没有内置方式,但您可以尝试https://github.com/making/yavi
您可以对Spring Webflux HTTP控制器使用有效的
反应式规划的主要思想是始终处理流链。根据db数据获取,您可以使用userRepository获取数据。findUserById(id)或类似于此。因此,您将收到单声道
为了处理这种情况,我建议使用以下代码:
public Mono<ServerResponse> handleUserRequest(ServerRequest serverRequest) {
return validateRequest(serverRequest)
.flatMap(userRequest -> userRepository.findUserById(userRequest.getUserId())
.switchIfEmpty(Mono.error(new RuntimeException("Not found")))
)
.flatMap(user -> ServerResponse.ok().body("Welcome " + user.getUsername(), String.class));
}
您可以调整您的validateRequest
方法以更具功能性(无需isPresent
检查):
private Mono<UserRequest> validateRequest(ServerRequest request) {
return Mono.just(request)
.map(req -> request.queryParam("userId")
.map(UserRequest::new)
.orElseThrow(() -> new RuntimeException("Invalid user"))
);
}
本文向大家介绍你是如何规划响应式布局的?相关面试题,主要包含被问及你是如何规划响应式布局的?时的应答技巧和注意事项,需要的朋友参考一下 从项目角度来讲, PC 和 Mobile 是一个项目还是两个项目; 从方法流派来讲, 有栅栏布局,固定 viewport,使用 rem/pt/vw 单位,使用定位百分比,修改为 rem/vw 单位,五种; 从文件结构来讲, 是独立为响应布局专用 css 文件,还是
硬币行问题:有一行n枚硬币,其值为一些正整数C0,C2,Cn-1,不一定不同。目标是提取最大金额的货币,但受限制,不能提取初始行中相邻的两个硬币。 在下面的代码中,n是我的数组C的大小(或硬币的数量),这段代码返回了值[10, 2, 4, 6, 3, 9, 5]的正确结果(正确的结果是25)。但是当我为值[3,12,10]或[3, 12, 10, 2]运行相同的代码时,我得到了错误的结果。(该组值
你如何防抖React.js? 我想防抖手柄。 我试过,但它不起作用。
问题内容: 我很确定它具有内置功能,但是在搜索或在文档中找不到任何内容。是否启用了启用multidex的标记? 另一个要注意的是:有什么方法可以查看哪些库弄乱了您的方法数量?达到64k的限制令人惊讶。 问题答案: 在其他地方找到答案。与为任何常规Android项目启用它没什么不同。 至于方法计数,此站点可以解决问题:http : //inloop.github.io/apk-method-coun
1. 自己选几个项目进行介绍,没有过分深入探究,简单了解一下; 2. EM planner & Lattice planner; 3. EM为什么要先规划路径后规划车速; 4. 决策的作用? 5. 无保护左转涉及的问题? 6. C++使用的多不多? 7. const的三种用法; 8. 智能指针(每次面试都有); 9. 虚函数; 10. stl知道哪些?vector了解多少? 11. 手撕:非递减数