Curl не работает в JetBrains IDE (Windows) для POST - PullRequest
0 голосов
/ 09 ноября 2018

Я работаю с руководством по руководствам Spring: Создание служб Rest с помощью Spring.

Я проследил за текстом и ввел код в учебнике.

Я попадаю в ту часть, где запускаю службу (на локальной машине), и тестирую с помощью команд CURL.

GET работает нормально:

Curl -v localhost:8080/employees

возвращает ожидаемый список

[{"id":1,"name":"Bilbo Baggins","role":"burglar"},{"id":2,"name":"Frodo Baggins","role":"thief"}]

Однако, когда я выполняю:

curl -X POST localhost:8080/employees -H 'Content-type:application/json' -d '{"name": "Samwise Gamgee", "role": "gardener"}'

Я получаю:

{"timestamp":"2018-11-08T20:55:49.844+0000","status":415,"error":"Unsupported Media Type","message":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported","path":"/employees"}

Вот код контроллера

package com.mainsworth.payroll;

import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

 @RestController

 class EmployeeController {
     private final EmployeeRepository repository;
     EmployeeController(EmployeeRepository repository) {
         this.repository = repository;
    }

@GetMapping("/employees")
List<Employee>all() {
    return repository.findAll();
}

@PostMapping("/employees")
Employee newEmployee(@RequestBody Employee newEmployee) {
    return repository.save(newEmployee);
}

//Single item
@GetMapping("/employees/{id}")
Employee one(@PathVariable Long id) {
    return repository.findById(id)
            .orElseThrow(()-> new EmployeeNotFoundException(id));
}

@PutMapping("/employees/{id}")
Employee replaceEmployee(@RequestBody Employee newEmployee,
                         @PathVariable Long id ) {
    return repository.findById(id)
            .map(employee -> {
                employee.setName(newEmployee.getName());
                employee.setRole(newEmployee.getRole());
                return repository.save(employee);
            })
            .orElseGet(() -> {
                newEmployee.setId(id);
                return repository.save(newEmployee);
            });

}
@DeleteMapping("/employees/{id}")
void deleteEmployee(@PathVariable Long id) {
    repository.deleteById(id);
}

}

Я последовал совету Кароля и Джеспера. Спасибо обоим за быстрый ответ. Мой новый керл:

curl -X POST  localhost:8080/employees -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{"name": "Samwise Gamgee","role": "gardener"}'

и мой новый ответ:

{"timestamp":"2018-11-08T22:49:01.900+0000","status":415,"error":"Unsupported Media Type","message":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' 
not supported","path":"/employees"}application
curl: (6) Could not resolve host: application

curl: (6) Could not resolve host: Samwise Gamgee,role

curl: (3) [globbing] unmatched close brace/bracket in column 9

1 Ответ

0 голосов
/ 09 ноября 2018

Укажите заголовки запроса Content-Type: application/json и Accept: application/json, так как ваша конечная точка потребляет и производит данные.

curl -H 'Content-Type: application/json' -H 'Accept: application/json' ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...