我试图创建一个使用RxJava的可观察类来执行异步处理一个简单的Spring RestController。 这里是我的代码:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserAsyncRepository repository;
@RequestMapping(value="/{userName}", method=GET)
public DeferredResult<ResponseEntity<User>> getByUserName(
@PathVariable String userName) {
final DeferredResult<ResponseEntity<User>> deferred =
new DeferredResult<ResponseEntity<User>>();
repository
.findByUserName(userName) // returns Observable<User>
.singleOrDefault(null)
.timeout(1, TimeUnit.SECONDS)
.subscribe(u -> {
if(u == null) {
deferred.setErrorResult(ResponseEntity.notFound());
} else {
deferred.setResult(ResponseEntity.ok(u));
}
}, t -> {
deferred.setErrorResult(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR));
}
);
return deferred;
}
}
当此方法是用有效的用户名调用,我得到我期待着与状态200。当调用此方法与无效的用户名的响应,响应是406而不是404,这是我所期望的。 让我知道如果你有任何想法,为什么发生这种情况。
在此先感谢您的帮助。