【问题标题】:Unable to get proper GET response无法获得正确的 GET 响应
【发布时间】:2019-05-30 15:20:18
【问题描述】:

我正在尝试在 spring-boot 中实现 GET 和 POST 方法。调用 GET 方法时没有得到正确的响应。

我的控制器类

@RestController
@RequestMapping("api/public")
public class PublicRestApiController {

@GetMapping("users")
public List<User> users(){
    return this.userRepository.findAll();
}

@PostMapping(path="/save")
@ResponseBody public User insertusers( @RequestBody UserRequest requestUser){
    User user = new User(requestUser.getUsername(),passwordEncoder.encode(requestUser.getPassword()),requestUser.getRoles(),requestUser.getPermissions());
    try { 
        user = this.userRepository.save(user);
        return user;
    }
    catch(Error e) {
        return user;
    }
}

}

用户请求类

public class UserRequest {

public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public int getActive() {
    return active;
}
public void setActive(int active) {
    this.active = active;
}
public String getRoles() {
    return roles;
}
public void setRoles(String roles) {
    this.roles = roles;
}
public String getPermissions() {
    return permissions;
}
public void setPermissions(String permissions) {
    this.permissions = permissions;
}
private String username;
private String password;
private int active;
private String roles = "";
private String permissions = "";

}

用户类

@Entity
@Table(name = "USER_DETAILS")
public class User {

@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@Column(nullable = false)
private String username;

@Column(nullable = false)
private String PASSWORD;

@Column
private int ACTIVE;

@Column
private String ROLES = "";

@Column
private String PERMISSIONS = "";

public User(String username, String password, String roles, String permissions){
    this.username = username;
    this.PASSWORD = password;
    this.ROLES = roles;
    this.PERMISSIONS = permissions;
    this.ACTIVE = 1;
}

public User(){}

public int getId() {
    return id;
}

public String getUsername() {
    return username;
}

public String getPassword() {
    return PASSWORD;
}

public int getActive() {
    return ACTIVE;
}

public String getRoles() {
    return ROLES;
}

public String getPermissions() {
    return PERMISSIONS;
}

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

public void setUsername(String username) {
    this.username = username;
}

public void setPassword(String password) {
    this.PASSWORD = password;
}

public void setActive(int active) {
    this.ACTIVE = active;
}

public void setRoles(String roles) {
    this.ROLES = roles;
}

public void setPermissions(String permissions) {
    this.PERMISSIONS = permissions;
}
}

UserRepository 类

@Repository
public interface UserRepository extends JpaRepository<User, Long>{

}

POST 方法工作正常,但在调用 GET 方法时,id 字段将变为默认值 0。未获取正确的 ID 值。而且在运行服务器时,如果我调用 POST 方法,它正在向数据库中插入数据,但是新插入的数据并没有被 GET 方法获取。只有那些数据被获取,我已经在数据库中插入了这些数据。

This is the data in database

This is the response which I am getting form GET method

【问题讨论】:

  • 尝试private Long id; 而不是private int id;。在您的仓库中,您已声明您的 ID 为 Long:public interface UserRepository extends JpaRepository&lt;User, Long&gt;{。但是您的实体正在使用int。不确定那会产生什么影响,但看起来不对。

标签: spring-boot get


【解决方案1】:

您的 USER 类具有类型为 int 的主键,并且在您的存储库中,您已扩展 带有 long 的 USER 类,它应该是 Integer,如下所示

存储库:

 @Repository
 public interface UserRepository extends JpaRepository<User, Integer>{

 }

更新:

 @Autowired UserRepository userRepository;

         @GetMapping("users")
         public List<User> users(){
              return userRepository.getAllUsers();
         }

存储库:

 @Repository
 public interface UserRepository extends JpaRepository<User, Integer>{
      @Query(value="select * from USER_DETAILS",nativeQuery=true)
      List<User> getAllUsers();
 }

import org.springframework.data.jpa.repository.Query;导入@Query


更新2: 项目结构的理想方式是根据类行为有不同的包。

  • 控制器
  • 服务
  • 存储库
  • 模型或实体
  • DTO、DAO
  • 根据要求进行安全、配置等

     //Controller
     @yourMapping
     public returnType method1()
     {
         myService.performBusinessLoginonMethod1(...) //if you are using services
         myReposiroty.DBOpertaion(...) //as per above case
     }

     //Service: myService
     returnType  performBusinessLoginonMethod1(...) 
     {
         myRepository.DBOpertaion(...)
     }

     //Repository: myRepository     
     @Modifying // import org.springframework.data.jpa.repository.Modifying;
     @Query(...)
     returnType DBOpertaion(...)

【讨论】:

  • 仍然只有 ID 为零。
  • @SrijibSen 你能在数据库中添加你得到的响应和实际数据吗
  • 添加了详细信息。
  • 您好@SrijibSen,您可以尝试在存储库中手动查询并共享响应,并且您是否在存储库中将 long 更改为 Integer
  • 是的,我已将 Long 更改为整数。而且我不知道如何使用手动查询。我刚刚开始探索spring-boot。
【解决方案2】:

您没有正确返回响应。试试这个。

    @GetMapping("users")
public ResponseEntity<List<Article>> users(){
        return new ResponseEntity<List<Article>>(this.userRepository.findAll(), HttpStatus.OK);
}

【讨论】:

  • POST 方法工作正常。数据正在存储在数据库中。但是如果我调用 GET 调用 POST 后,新插入的数据没有被获取。
  • 不可能,您没有在任何地方插入数据。检查控制器中的添加方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
相关资源
最近更新 更多