Получал статус 500 и сообщение «Отсутствует переменная шаблона URI 'rank'» при каждом тестировании HTTP-запроса POST на почтальоне. - PullRequest
0 голосов
/ 20 июня 2020

Я получил ошибку «Решено [org.springframework.web.bind.MissingPathVariableException: Отсутствует переменная шаблона URI 'rank' для параметра метода типа Rank]» на консоли eclipse. И сообщение: «Отсутствует переменная шаблона URI 'rank' для параметр метода типа Rank "со статусом" 500 "при каждой попытке HTTP-запроса POST

  1. Мой код RESTController:
@RestController
@RequestMapping(path =  "/comp")
public class RankController {
    @PostMapping(path = "/rank")
    ResponseEntity<Rank> createRank(@Valid @PathVariable Rank rank) throws URISyntaxException{
        Rank result = rankRepository.save(rank);
        return ResponseEntity.created(new URI("/comp/rank" + result.getId())).body(result);
    }
}
сущность My Rank
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "RANK_TBL")
public class Rank {

    @Id
    private Long id;
    private String name;

    @ManyToOne(cascade = CascadeType.PERSIST)
    private Employee employee;
}
Мой сотрудник
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "EMPLOYEE_TBL")
public class Employee {
    
    @Id
    private Long id;
    private String name;
    private String email;
    
    @OneToMany
    private Set<Rank> Rank;
    
}

1 Ответ

1 голос
/ 20 июня 2020

Замените @PathVariable на @RequestBody

Здесь вы делаете запрос на сохранение объекта и должны передать полезные данные как @RequestBody в формате JSON. От почтальона вы можете использовать необработанный тип и выбрать тип JSON.

Идеальный способ - использовать @RequestBody всякий раз, когда мы создаем или обновляем записи, которые требуют передачи объекта с помощью методов POST и PUT. Для методов, которые извлекают записи на основе Id или некоторых параметров, вы можете использовать @PathVariable

Подробнее об аннотациях можно узнать здесь

...