I am trying to implement a GET and a POST method in spring-boot. While calling GET method not getting proper response.
My Controller class
@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;
}
}
}
UserRequest class
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 = "";
}
User Class
@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 class
@Repository
public interface UserRepository extends JpaRepository<User, Long>{
}
POST method is working fine, but while calling GET method, id field is coming default value 0.Not fetching proper ID values. And also while running server, if I call POST method, it is inserting data in database, but that newly inserted data is not getting fetched by GET method.Only those data are getting fetched, which I have already inserted in the database.
Your USER class has Primary key with Type int
and in your Repository, you have extended
USER class with long which should be Integer as below
Repository:
@Repository
public interface UserRepository extends JpaRepository<User, Integer>{
}
UPDATE:
@Autowired UserRepository userRepository;
@GetMapping("users")
public List<User> users(){
return userRepository.getAllUsers();
}
Repository:
@Repository
public interface UserRepository extends JpaRepository<User, Integer>{
@Query(value="select * from USER_DETAILS",nativeQuery=true)
List<User> getAllUsers();
}
import @Query
from import org.springframework.data.jpa.repository.Query;
UPDATE2: Idel way of project structure is to have different packages according to class behavior.
//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(...)