#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