Тестирование Post-запроса серверной части Spring Boot с использованием Postman и Curl

#java #spring #spring-boot #request #postman

#java #spring #spring-boot #запрос #postman

Вопрос:

Я пытался протестировать некоторые простые методы запроса GET и POST, используя Postman и curl через командную строку.

По какой-то причине, когда я пытаюсь создать файл json и отправить его через Postman, он сохраняет все данные в первую переменную.

Я понятия не имею, что происходит. Интерфейс доставит все через файлы JSON, поэтому, если это не работает, я хочу исправить это до завершения работы моего контроллера.

Вот моя фармацевтическая модель:

 @Entity
@Table(name = "pharmaceuticals")
public class Pharmaceutical {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    
    @Column(name = "genericName")
    private String genericName;
    
    @Column(name = "brandNames")
    private ArrayList<String> brandNames;
    
    @Column(name = "strength" )
    private String strength;
    
    @Column(name = "quantity")
    private Integer quantity; 
    
    @ManyToMany(fetch = FetchType.LAZY,
            cascade = {
                CascadeType.MERGE,
                CascadeType.REFRESH
            })
    
    @JoinTable(name = "pharm_commonuses",
        joinColumns = { @JoinColumn(name = "pharmaceutical_id") },
        inverseJoinColumns = { @JoinColumn(name = "commonUse_id") })
    private Set<CommonUse> commonUses = new HashSet<>();
    
    public Pharmaceutical() {}
        
    public Pharmaceutical(String genericName, ArrayList<String> brandNames, String strength,
            Integer quantity) {
        this.genericName = genericName;
        this.brandNames = brandNames;
        this.strength = strength;
        this.quantity = quantity;
    }
    //getters and setters
  

Вот мой контроллер:

 @CrossOrigin(origins = "http://localhost:8081")
@RestController
@RequestMapping("/api")
public class PharmaceuticalController {
    
    @Autowired
    PharmaceuticalRepository pharmRepository;
    CommonUseRepository comRepository;
    
    @GetMapping("/pharmaceuticals")
    public ResponseEntity<List<Pharmaceutical>> getPharmaceuticals(@RequestParam(required = false) String title){
        List<Pharmaceutical> pharms = new ArrayList<Pharmaceutical>();
        pharmRepository.findAll().forEach(pharms::add);
        return new ResponseEntity<>(pharms, HttpStatus.OK);
    } 
    
    @PostMapping("/pharmaceuticals")
    public ResponseEntity<Pharmaceutical> createPharmaceutical(@RequestBody String generic, ArrayList<String> brands, String strength, Integer quant, ArrayList<String> common){
        Pharmaceutical newPharm = new Pharmaceutical(generic, brands, strength, quant);
        for (String name: common) {
            CommonUse com = new CommonUse(name);
            comRepository.save(com);
            newPharm.getCommonUses().add(com);
        }
        pharmRepository.save(newPharm);
        return new ResponseEntity<>(newPharm, HttpStatus.CREATED);
    }
}
  

Любая помощь была бы отличной!

Ответ №1:

Это ваша проблема:

 @RequestBody String generic
  

Вы говорите, что тело, которое приходит, должно быть помещено в эту строку.

Вы должны создать объектное представление тела, в которое вы отправляете, и изменить его на:

 @RequestBody PharmaceuticalRequest generic
  

а затем удалите все остальные входные параметры в createPharmaceutical функции.

Ссылка:https://www.baeldung.com/spring-request-response-body#@requestbody