Проблемы с доступом к Spring-Boot RestController из внешнего интерфейса Angular - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующие настройки:

Мой контроллер:

@RequestMapping("/project")
@RestController
public class ProjectController {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    ProjectService projectService;

    @CrossOrigin
    @PostMapping(value = "/createProject")
    public ResponseEntity createProject(@RequestBody ProjectDto projectJsonString) {
        return ResponseEntity.ok(HttpStatus.OK);
    }
}

В моем .service.ts:

this.http.post('http://localhost:8080/project/createProject', JSON.stringify(project)).
      subscribe( (res) => {
        this.logger.info('Response: ' + res);
      });

My Dto:

public class ProjectDto {
    private String projectName;
    private String projectNumber;
    private String projectArea;
    private String managerName;
    private String managerShorthand;
}

Но когда я собираю приложение в jar-файл и выполняю его, я получаю следующую ошибку при выполнении api-вызова:

HttpErrorResponse {headers: HttpHeaders, status: 415, statusText: "OK", url: "http://localhost:8080/project/createProject", ok: false, …}
error:
error: "Unsupported Media Type"
message: "Content type 'text/plain;charset=UTF-8' not supported"
path: "/project/createProject"
status: 415
timestamp: "2018-12-10T21:41:26.036+0000"

и то же самое происходит, когда я curl это.Может кто-нибудь сказать мне, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Как упоминалось HL'REB, вы должны добавить правильный Content-Type к вашему пост-запросу, так как вы используете весеннюю загрузку и RestControllers. Я предполагаю, что поддержка json по умолчанию активирована, так что, вероятно, это ожидаемый тип носителя (application/json).

Чтобы вы могли попробовать следующее изменение

this.http.post('http://localhost:8080/project/createProject', JSON.stringify(project), 
{ 
  headers: {'Content-Type': 'application/json'} 
}).subscribe( (res) => {this.logger.info('Response: ' + res);});
0 голосов
/ 11 декабря 2018

Ошибка «Неподдерживаемый тип носителя» возникает, когда в запросе отсутствует соответствующий заголовок Content-Type.

Убедитесь, что ваши запросы содержат заголовок «Content-Type» со значением «application / json» (при условии, что ваши отправленные данные находятся в формате Json).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...