когда я публикую, он показывает ошибку 404, не найденную при весенней загрузке, даже когда я объявил @RequestMapping - PullRequest
0 голосов
/ 07 мая 2020

Я создал службу пользователя, в которой я хочу добавить нового пользователя, найти пользователя по идентификатору, а также по другим атрибутам. Я расширил репозиторий JPA, так как узнал, что функции уже есть. Но я даже не могу сохранить нового пользователя.

Это моя модель

package bt.gov.dit.userservice.model;

import javax.persistence.*;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column
    private Long Id;

    @Column
    private String name;

    @Column
    private String email;

    @Column
    private String role;

    public Long getId() {
        return Id;
    }

    public void setId(Long id) {
        Id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public User(Long id, String name, String email, String role) {
        Id = id;
        this.name = name;
        this.email = email;
        this.role = role;
    }

    public User() {
    }
}

Это мой репозиторий

 package bt.gov.dit.userservice.dao;

import bt.gov.dit.userservice.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

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

    User findUserByRole(String role);

}

Это мой сервис

package bt.gov.dit.userservice.service;
import bt.gov.dit.userservice.dao.UserRepository;
import bt.gov.dit.userservice.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User save(User user){

        return userRepository.save(user);
    }
 public User getByRole(String role){
        return userRepository.findUserByRole(role);
    }
}

А это мой Контроллер

package bt.gov.dit.userservice.controller;

import bt.gov.dit.userservice.model.User;
//import bt.gov.dit.userservice.service.UserService;
import bt.gov.dit.userservice.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequestMapping("/api")

public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping
    public ResponseEntity<User> create(@Valid @RequestBody User user) {

        User updated = userService.create(user);
        return new ResponseEntity<User>(updated, new HttpHeaders(), HttpStatus.OK);

    }

    @GetMapping("/{role_id}")
    public ResponseEntity<User> getUserByRole(@PathVariable("role_id") String role)
    {
        User entity = userService.getByRole(role);

        return new ResponseEntity<User>(entity, new HttpHeaders(), HttpStatus.OK);
    }
}

Я только начал изучать Spring boot и не могу понять, что не так в коде. Я хочу вставить / сохранить нового пользователя. Но когда я звоню / api / user, он говорит, что 404 не найден. Я использую базу данных h2 в памяти.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Я думаю, проблема заключается в имени аргумента метода контроллера - role-> role_id

   @GetMapping("/{role_id}")
public ResponseEntity<User> getUserByRole(@PathVariable("role_id") String role_id)
{
    User entity = userService.getByRole(role_id);

    return new ResponseEntity<User>(entity, new HttpHeaders(), HttpStatus.OK);
}

role_id должен быть таким же, как вы упомянули в маршрутах. Пример маршрута-> localhost: 8080 / api / 2

0 голосов
/ 07 мая 2020

вам нужно сопоставить другую часть запроса следующим образом:

@ PostMapping (value = "/ user", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)

Я также рекомендую вам использовать Пользовательский интерфейс Springfox Swagger с использованием аннотации @ EnableSwagger2 Это предоставит вам пользовательский интерфейс со всеми запросами по адресу http://localhost: 8080 / swagger-ui. html

Ссылка: https://www.baeldung.com/swagger-2-documentation-for-spring-rest-api

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...