@POST
@Path("/register")
public String register( String body ) throws Exception
{
ObjectMapper objectMapper = json();
User user = objectMapper.readValue( body, User.class );
int random = getRandomNumber( 111111, 999999 );
String uuid = null;
//first, check if user already did registration from that phone
UserDbRecord userDbRecord = UserDAO.getInstance().getUserByPhone( user.phone );
if( userDbRecord != null )
{
logger.info( "register. User already exist with phone: " + user.phone + ", id: " + userDbRecord.getId() );
uuid = userDbRecord.getToken();
}
else
{
uuid = UUID.randomUUID().toString();
}
SMS.send( user.phone, random );
Auth auth = new Auth();
auth.token = uuid;
return objectMapper.writeValueAsString( auth );
}
public Mono<ServerResponse> register( ServerRequest request )
{
Mono<User> user = request.bodyToMono( User.class );
Mono<UserDbRecord> userDbRecord = user.flatMap( u -> Mono.just( userRepository.findByPhone( u.phone ) ) );
int random = getRandomNumber( 111111, 999999 );
String uuid = null;
//first, check if user already did registration from that phone
//now what???
if( userDbRecord != null )
{
logger.info( "register. User already exist with phone: " + userDbRecord.getPhone() + ", id: " + userDbRecord.getId() );
uuid = userDbRecord.getToken();
}
else
{
uuid = UUID.randomUUID().toString();
}
SMS.send( user.phone, random );
Auth auth = new Auth();
auth.token = uuid;
return ok().contentType( APPLICATION_JSON ).syncBody( auth );
}
检查userDbRecord Mono是否为空以及如果不为空则从中提取phone属性的最佳方法是什么?
在使用RxJava或Project Reactor的反应式编程中,从头到尾继续您的流程是非常重要的。
在您的情况下,您必须将命令验证/检查替换为响应验证/检查:
public Mono<ServerResponse> register( ServerRequest request )
{
return request
.bodyToMono( User.class )
// make sure you use Reactive DataBase Access in order to
// get the all benefits of Non-Blocking I/O with Project Reactor
// if you use JPA - consider Moving to R2DBC r2dbc.io
.flatMap( user -> // <1>
Mono.just( userRepository.findByPhone( user.phone ) ) // <2>
.map(userDbRecord -> {
logger.info( "register. User already exist with phone: " + userDbRecord.getPhone() + ", id: " + userDbRecord.getId() );
return userDbRecord.getToken();
})
.switchIfEmpty(Mono.fromSupplier(() -> UUID.randomUUID().toString())) <3>
.flatMap(uuid -> {
SMS.send( user.phone, random ); <4>
Auth auth = new Auth();
auth.token = uuid;
return ok().contentType( APPLICATION_JSON ).syncBody( auth );
})
);
}
上面的示例演示了如何将命令式控制器的方法重写为反应式方法。我在下面对他们做了一些评论和描述:
我尝试做的是从同一个站点发布数据并从它创建一个新的订单(当提交按钮被点击时)。我没有任何信息在我的请求。身体,我怀疑是在我的ejs出了问题,任何反馈是非常感谢的。 我的ejs文件: 和我的js文件:
问题内容: 我正在尝试让我的函数返回http get请求,但是,无论如何,它似乎在?scope中丢失了。我对Node.js不熟悉,因此不胜感激 问题答案: 当然,您的日志会返回:您在完成请求之前先进行日志。问题不是范围,而是 异步性 。 是异步的,这就是为什么它将回调作为参数的原因。做您在回调中要做的事情(传递给的):
问题内容: 这是我在index.html上的代码: 我如何编程test.php以获取在AJAX API中发送的“数据”? 问题答案: 您在这里问一个非常基本的问题。您首先应该阅读一些Ajax教程。只是为了帮助您(假设您知道发送数据的GET和POST方法),数据中的“数据”:函数(数据)中的“数据”与“数据”不同。为了清楚起见,您应该为它们命名不同,如下所示: 这清楚地表明,一个是要通过POST参数
我正在构建一个Java的grpc服务器,我很难得到请求头。proto文件是使用Pro buf-maven-plugin编译的,基于生成的存根,我无法访问上下文或请求元数据。 我还尝试在消息请求中定义一个键/值列表,希望grpc能够处理头映射,但目前为止没有成功。 知道我怎么能拿到标题吗? 谢谢 我的原型文件内容: 服务器端实现如下所示: 版本请求。getHeadersCount()始终返回0,尽管
如何从HttpSessionAttributeListener获取请求对象以查找用户的IP地址? 谢谢
我从jquery发送如下请求: 在servlet内部,我可以获得参数,但问题是参数包含序列化的表单数据:如下所示: 我知道我可以使用来获取数据,但我想确保--如果他们的方法简单与否?