【发布时间】:2015-04-09 04:53:29
【问题描述】:
我正在尝试创建一个简单的 Spring RestController,它使用 RxJava 的 Observable 类来执行异步处理。这是我的代码:
@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,这正是我所期望的。如果您知道为什么会发生这种情况,请告诉我。
提前感谢您的帮助。
【问题讨论】:
标签: spring-mvc rx-java