Spring mvc 406在DeferredResult上调用setErrorResult时的响应状态
我试图创建一个简单的SpringRestController,它使用RxJava的可观察类来执行异步处理。这是我的密码:Spring mvc 406在DeferredResult上调用setErrorResult时的响应状态,spring-mvc,rx-java,Spring Mvc,Rx Java,我试图创建一个简单的SpringRestController,它使用RxJava的可观察类来执行异步处理。这是我的密码: @RestController @RequestMapping("/users") public class UserController { @Autowired private UserAsyncRepository repository; @RequestMapping(value="/{userName}", method=GET) publ
@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,这是我所期望的。如果你知道为什么会这样,请告诉我
提前感谢您的帮助。通过向DeferredResult类的setErrorResult方法传递一个异常实例,我能够获得预期的404响应。这是我的异常类:
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
private static final long serialVersionUID = 1L;
public ResourceNotFoundException(String message) {
super(message);
}
}
关键是确保将@ResponseStatus注释添加到自定义异常类中
嗯