Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 406在DeferredResult上调用setErrorResult时的响应状态_Spring Mvc_Rx Java - Fatal编程技术网

Spring mvc 406在DeferredResult上调用setErrorResult时的响应状态

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

我试图创建一个简单的SpringRestController,它使用RxJava的可观察类来执行异步处理。这是我的密码:

@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注释添加到自定义异常类中