Не удалось получить правильный ответ GET

Я пытаюсь реализовать метод GET и POST в spring-boot. При вызове метода 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;
    }
}

}

Класс UserRequest

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. Не извлекаются правильные значения идентификатора. А также во время работы сервера, если я вызываю метод POST, он вставляет данные в базу данных, но эти недавно вставленные данные не извлекаются методом GET. Извлекаются только те данные, которые я уже вставил в базу данных.

Это данные в базе

Это ответ, который я получаю методом GET

попробуйте private Long id; вместо private int id;. В своем репо вы заявили, что ваш идентификатор является длинным: public interface UserRepository extends JpaRepository<User, Long>{. Но ваша сущность использует int. Не уверен, каковы будут последствия этого, но выглядит неправильно.

David Lavender 29.05.2019 11:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
1
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В вашем классе USER есть первичный ключ с типом int, и в вашем репозитории вы расширили Класс USER с длинным, который должен быть целым числом, как показано ниже.

Репозиторий:

 @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();
 }

импортировать @Query из import org.springframework.data.jpa.repository.Query;


ОБНОВЛЕНИЕ2: Idel способ структуры проекта состоит в том, чтобы иметь разные пакеты в соответствии с поведением класса.

  • Контроллер
  • Оказание услуг
  • Репозиторий
  • Модели или сущность
  • 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.

Srijib Sen 29.05.2019 12:24

@SrijibSen, можете ли вы добавить ответ, который вы получаете, и фактические данные в базе данных?

Romil Patel 29.05.2019 12:25

Добавил детали.

Srijib Sen 29.05.2019 12:43

Здравствуйте @SrijibSen, можете ли вы попробовать выполнить ручной запрос в репозитории и поделиться ответом, и вы давно изменились на Integer в репозитории?

Romil Patel 29.05.2019 13:03

Да, я изменил Long на integer. И я не знаю, как использовать ручной запрос. Я только начал изучать spring-boot.

Srijib Sen 29.05.2019 13:45

@SrijibSen, пожалуйста, сообщите об обновлении и сообщите мне результат

Romil Patel 29.05.2019 13:55

Да, теперь это работает. Но если мне нужно написать другой метод с другим ручным запросом, как в этом случае я могу написать и сопоставить их с методами?

Srijib Sen 30.05.2019 08:51

Вы не возвращаете ответ должным образом. Попробуй это.

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

Метод POST работает нормально. Данные сохраняются в базе данных. Но после вызова POST, если я вызываю GEt, вновь вставленные данные не извлекаются.

Srijib Sen 29.05.2019 12:25

Невозможно, вы никуда не вставляете данные. Проверьте свой метод добавления в контроллере.

Atul Jain 29.05.2019 12:31

Другие вопросы по теме