Я пытаюсь отправить запрос POST с данными формы (приложение Laravel) в Java Spring rest api (http: // локальный: 8000 / API / устройства / createDevice).
Но я получил ошибку (400 Bad Request). С POSTMAN все работает отлично, но не с Guzzle. Как решить эту проблему?
Изображения из Почтальона Почтальон Тело почтальона
Изображение заголовка почтальона
Изображение ошибки: ошибка
С dd: функция dd
Контроллер Laravel
public function deviceCreate(Request $request){
$deviceIp= $request->input('deviceIp');
$devicePort= $request->input('devicePort');
$deviceFrequencyCollection= $request->input('deviceFrequencyCollection');
$deviceFrequencyUpload= $request->input('deviceFrequencyUpload');
$serverName= $request->input('serverName');
$serverAddress= $request->input('serverAddress');
$PortServer= $request->input('PortServer');
try{
$device= new Client([
'headers' => [ 'Content-Type' => 'application/json' ]
]);
$requirement= $device->post( 'http://localhost:8000/api/devices/createDevice',
['json' =>json_encode(
[
'deviceIp' => $deviceIp,
'devicePort' => $devicePort,
'deviceFrequencyCollection' => $deviceFrequencyCollection,
'deviceFrequencyUpload' => $deviceFrequencyUpload,
"deviceStatus" => "false",
'serverName' => $serverName,
'PortServer' => $PortServer
] )
]
);
$answer= $device->send($requirement);
} catch (RequestException $e) {
dd($e->getRequest());
}
return redirect()->route('graph.home')->with('info', 'Success ');
}
}``
Client Controller.java (весенний контроллер)
/* For client registration at the point of the client installation */
@RequestMapping(value = "/clients/createClient", method = RequestMethod.POST)
public ResponseEntity<?> createClient(@RequestBody ClientDto clientDto) {
Long id = clientService.createClient(clientDto);
return new ResponseEntity<Long>(id, HttpStatus.OK);
}
Client.java (модель Spring)
public class Client {
@Id
@GeneratedValue
@Column(name = "client_id")
private Long clientId;
@NotNull
@Column(unique = true)
private String clientAllias;
@NotNull
private String clientIp;
@NotNull
private String clientPort;
@NotNull
private Double dataCollectionFrequency;
@NotNull
private Double dataUploadFrequency;
@NotNull
private Boolean isClientAvailable;
@NotNull
private String serverAllias;
@NotNull
private String serverIp;
@NotNull
private String serverPort;
@OneToMany
@JoinColumn(name = "client_id")
private List<ClientData> clientData = new ArrayList<ClientData>();
public Client() {
}
public Client(ClientDto clientDto) {
super();
this.clientAllias = clientDto.getClientAllias();
this.clientIp = clientDto.getClientIp();
this.clientPort = clientDto.getClientPort();
this.dataCollectionFrequency = clientDto.getDataCollectionFrequency();
this.dataUploadFrequency = clientDto.getDataUploadFrequency();
this.isClientAvailable = clientDto.getIsClientAvailable();
this.serverAllias = clientDto.getServerAllias();
this.serverIp = clientDto.getServerIp();
this.serverPort = clientDto.getServerPort();
}
public Long getClientId() {
return clientId;
}
public void setClientId(Long clientId) {
this.clientId = clientId;
}
public String getClientAllias() {
return clientAllias;
}
public void setClientAllias(String clientAllias) {
this.clientAllias = clientAllias;
}
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
public String getClientPort() {
return clientPort;
}
public void setClientPort(String clientPort) {
this.clientPort = clientPort;
}
public Double getDataCollectionFrequency() {
return dataCollectionFrequency;
}
public void setDataCollectionFrequency(Double dataCollectionFrequency) {
this.dataCollectionFrequency = dataCollectionFrequency;
}
public Double getDataUploadFrequency() {
return dataUploadFrequency;
}
public void setDataUploadFrequency(Double dataUploadFrequency) {
this.dataUploadFrequency = dataUploadFrequency;
}
public Boolean getIsClientAvailable() {
return isClientAvailable;
}
public void setIsClientAvailable(Boolean isClientAvailable) {
this.isClientAvailable = isClientAvailable;
}
public String getServerAllias() {
return serverAllias;
}
public void setServerAllias(String serverAllias) {
this.serverAllias = serverAllias;
}
public String getServerIp() {
return serverIp;
}
public void setServerIp(String serverIp) {
this.serverIp = serverIp;
}
public String getServerPort() {
return serverPort;
}
public void setServerPort(String serverPort) {
this.serverPort = serverPort;
}
public List<ClientData> getClientData() {
return clientData;
}
public void setClientData(List<ClientData> clientData) {
this.clientData = clientData;
}
}
Опять та же ошибка (400) :(






Попробуй это:
$request = $client->post('http://localhost:8080/api/clients/createClient',
['form_params' => json_encode(
[
'clientIp' => $clientIp,
'clientPort' => $clientPort,
'dataCollectionFrequency' => $dataCollectionFrequency,
'dataUploadFrequency' => $dataUploadFrequency,
"isClientAvailable" => "false",
'serverAllias' => $serverAllias,
'serverPort' => $serverPort,
]),
]
);
$response = $request->getBody()->getContents();
На самом деле спасибо за ответ, но теперь он говорит, что у меня «500 Internal Server Error»
@Nenad попробуйте поменять body на form_params
Теперь ответ 400 Bad Request: оххххххххххх, я не знаю, возможно ли это :(
@Nenad верните его к ошибке 500, а также измените параметр isClientAvailable на false вместо строки "false"
Опять ничего, и это всегда ошибка 400, я пробовал все (json, body, form_params)
Промежуточное ПО Laravel VerifyCsrfToken позволяет указывать маршруты, которые исключаются из проверки CSRF. Для этого вам нужно добавить маршруты в массив $ except в вашем классе App \ Http \ Middleware \ VerifyCsrfToken.php:
Форма Laravel DOcs Исключение URI из защиты CSRF Иногда вы можете захотеть исключить набор URI из защиты CSRF. Например, если вы используете Stripe для обработки платежей и используете их систему веб-перехватчиков, вам необходимо исключить маршрут обработчика веб-перехватчиков из защиты Laravel от CSRF.
Вы можете исключить URI, добавив их в свойство $ except промежуточного программного обеспечения VerifyCsrfToken:
по запросу жрать замените
jsonнаbody