微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Boot ResponseEntity 不操纵 HTTP 响应

如何解决Spring Boot ResponseEntity 不操纵 HTTP 响应

我在处理响应实体异常时遇到问题。正如所见,我的响应实体错误并未改变 HTTP 响应。

我的代码

      public ResponseEntity<User> retriveUser(@PathVariable int id){
      Optional<User> foundUser;
      foundUser= userRepo.findById(id);
      
      if(foundUser.get()==null) {
          return new ResponseEntity<>(foundUser.get(),HttpStatus.HttpStatus.NOT_FOUND);
          }
      
      else {
          return new ResponseEntity<>(foundUser.get(),HttpStatus.OK);
          }    
  }  

enter image description here

解决方法

您的代码中有一些错误,首先 foundUser.get()==null 部分没有进入 if 块,因为它抛出了错误。您可以检查 "GETT" 以找出抛出错误的原因。

  • 它还需要是 HttpStatus.NOT_FOUND 而不是 HttpStatus.HttpStatus.NOT_FOUND
  • 在“Not Found”行中,使optionalUser.get()方法不报错;你也必须删除它。
@GetMapping("/user/{id}")
public ResponseEntity<User> retrieveUser(@PathVariable int id) {
   Optional<User> optionalUser = userRepo.findById(id);
   if (!optionalUser.isPresent()) {
      return new ResponseEntity<>(null,HttpStatus.NOT_FOUND);
   } else {
      return new ResponseEntity<>(optionalUser.get(),HttpStatus.OK);
   }
}
,

如果值不存在,则不应调用 get() 方法。你可以试试像下面这样吗

public ResponseEntity<User> retriveUser(@PathVariable int id){
      Optional<User> foundUser = userRepo.findById(id);
      
      if(foundUser.isPresent()) {
          return new ResponseEntity<>(foundUser.get(),HttpStatus.HttpStatus.OK);
      }else {
          return new ResponseEntity<>(null,HttpStatus.NOT_FOUND);
          //or just return not found status code 
          //return new ResponseEntity<>(HttpStatus.NOT_FOUND); 
     }    
  } 
,

虽然当前接受的答案包含它需要的所有细节,但我在这里添加了我的建议,请看一看。 你可以摆脱if else

    @RestController
    @RequestMapping(path = "users")
    static class UserController {

        private final Map<Long,UserInfo> users = new HashMap<>();

        UserController() {
            users.put(1L,new UserInfo(1L,"User 1"));
            users.put(2L,"User 2"));
        }

        @GetMapping(path = "{id}")
        public ResponseEntity<UserInfo> get(@PathVariable("id") Long id) {
            return findUserById(id)
                    .map(ResponseEntity::ok)
                    .orElse(new ResponseEntity<>(UserInfo.notFoundUser(),HttpStatus.NOT_FOUND));
        }

        Optional<UserInfo> findUserById(@NonNull Long id) {
            return Optional.ofNullable(users.get(id));
        }

        static class UserInfo {
            Long id;
            String name;

            public UserInfo() {
            }

            public UserInfo(Long id,String name) {
                this.id = id;
                this.name = name;
            }

            public Long getId() {
                return id;
            }

            public void setId(Long id) {
                this.id = id;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            static UserInfo notFoundUser() {
                return new UserInfo(-1L,null);
            }
        }
    }
,

将您的代码更改为以下

if(foundUser.isPresent()) {
          return new ResponseEntity<>(foundUser.get(),HttpStatus.OK);
} else {
          return new ResponseEntity<>(foundUser.get(),HttpStatus.HTTP_VERSION_NOT_SUPPORTED);
}    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?