WebFlux、反应式和处理程序的新功能。
我能得到单声道
任何对Account tRequest estHandler中代码的帮助/输入都将不胜感激,尤其是解释建议更改背后的基本原理。
路由器实现(分解为仅“POST”)。。。
@Configuration
public class AccountRequestRouter {
@Bean
public RouterFunction<ServerResponse> route(AccountRequestHandler requestHandler) {
return nest(path("/v2"),
nest(accept(APPLICATION_JSON),
.andRoute(RequestPredicates.POST("/accounts"), requestHandler::addAccount)
));
}
}
处理程序实现...我真正做添加的代码,然后单独创建一个服务器响应,是我关注的。它看起来“笨拙”,尤其是因为AccountService.addAccount()在完成时返回一个Mono。
@Component
public class AccountRequestHandler {
@Autowired
private mil.navy.ccop.service.accounts.account.AccountService accountService;
public Mono<ServerResponse> addAccount(ServerRequest request) {
return request.bodyToMono(Account.class).flatMap(account -> {
accountService.addAccount(account);
return ServerResponse.ok().build();
})
.switchIfEmpty(ServerResponse.badRequest()
.contentType(APPLICATION_JSON)
.build(Mono.empty()));
}
}
AccountService实现(再次,被剥离)。。。
@Service
class AccountService {
@Autowired
private AccountRepository accounts;
public AccountService() {
}
public Mono<Void> addAccount(Account account) {
Account proxy;
// make sure that accountId is set to support auto-generation of synthetic key value
proxy = new Account(-1, account.getShortName(), account.getLongName(), account.getDescription());
accounts.save(proxy);
return Mono.empty();
}
}
感谢所有在提升这种编程风格方面的帮助。。。。
首先,你有2个addAccount,这可能有点混乱。
第二,你也在写什么样的“存储库”?如果是sql repo,则需要将其正确包装在<code>Mono中。fromCallable()否则它将阻塞<code>反应性
是的,还有其他做事方式。很多人倾向于在平面图
或地图
中做事,当然在这里做事是完全可能的,但对于语义,我会说它不太好。
map
和平面图
通常用于对单声道的内部值执行某种计算,然后返回相同或新的值和或单声道内部的类型。
我会把它改写成这样。
在此返回void:
public void addAccount(Account account) {
Account proxy;
// make sure that accountId is set to support auto-generation of synthetic key value
proxy = new Account(-1, account.getShortName(), account.getLongName(), account.getDescription());
accounts.save(proxy);
}
这里:
public Mono<ServerResponse> addAccount(ServerRequest request) {
return request.bodyToMono(Account.class)
.doOnSuccess(account -> {
accountService.addAccount(account);
}).then(ServerResponse.ok().build())
.switchIfEmpty(ServerResponse.badRequest()
.contentType(APPLICATION_JSON)
.build());
}
有许多不同的doOn
方法可用于消费和对事物产生“副作用”。像doOnSuccess
,doOnError
,doOnCancel
等。
你也有然后
然后返回
,这将只返回你放入其中的任何东西。然后
返回您放入其中的任何内容 Mono
。然后返回
将您放入其中的任何值包装到 Mono
中并返回它。
因此,正如一个人在之前的帖子中所说的,我会使用: 包括行末的“我的文件”。 由于未使用,我想我应该在标准输出中接收操作的结果。然后执行它并获得(注意,我使用而不是只是为了查看是否可以根据需要修改文件,因为在本例中,文件已经有了所需的行): 所以如您所见,文件没有更改。我做错了什么? 感谢阅读
问题内容: 已解决:问题是Wingware Python IDE。我想现在自然而然的问题是,这是怎么可能的以及如何解决。 昨天我问了一个问题Python中的multiprocessing.Pool问题,这个问题几乎相同,但是我发现它似乎可以在Windows计算机上运行,而不能在我的Ubuntu上运行。在本文的结尾,我将发布执行相同功能的代码的稍有不同的版本。 我的问题的简短摘要:在Python
我正在开发新的web,我想使用ArcGIS javascript API4使用WMTS服务 选择空间参考EPSG:25830时,Javascript API 4.11中的WMTSLayer似乎不起作用。 问题是API生成的请求不正确,Tilerow参数错误。 正在发送的请求是这样的。http://www.ign.es/wmts/ign-base?SERVICE=WMTS 而且一定是... http
我试图将JMX与activeMQ一起用于监控。到目前为止,我一直将其作为参考,但到目前为止我无法远程连接到JMX,而且我在activeMQ日志中没有看到任何提到JMX url的内容。我想知道是否有其他方法来确保jmx工作正常?它应该在activemq日志中显示吗?PS我正在使用jdk1.7和activeMQ 5.14.2。 提前感谢! 编辑 我在activemq.xml文件中设置了useJmx="
我在Windows上,我已经在环境变量中设置了JDK 1.8的路径。同样在项目结构方面,我已经改变了。我有一个Maven项目。 在命令行中,如果我使用“mvn--version”,我会看到 然而,在IntelliJ中,如果我点击Run按钮,它总是指向JDK 1.7,并抛出一个错误(因为我的maven项目需要java 8)。我该怎么改变呢?谢谢 更新在遵循@BevyQ提示后,我发现Maven run
我对python还很陌生,我正在尝试创建21点。然而,当我试图打印出玩家的手牌时,我遇到了一些困难。 这是我的击球(抽牌)代码: 这是我打印卡片的代码: 我的代码所做的第一件事是为庄家和玩家抽两张牌,这运行得很好。然而,当玩家抽到一张牌后,它就会变得有点摇摆不定。输出如下所示: 当我抽到一张新牌时,这张牌不变,它保持我抽到的最后一张牌。然后,当我打印我的甲板,它打印我的旧甲板和我的新甲板。但是,分