代码之家  ›  专栏  ›  技术社区  ›  Rüdiger

从角度前端访问spring boot restcontroller时出现的问题

  •  0
  • Rüdiger  · 技术社区  · 5 年前

    我有以下设置:

    我的控制器:

    @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);
          });
    

    我的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 回复  |  直到 5 年前
        1
  •  1
  •   HL'REB    5 年前

    当请求不包含适当的内容类型头时,会出现“不支持的媒体类型”错误。

    请确保您的请求包含值为“application/json”的“content type”头(假设您发送的数据是json格式的)。

        2
  •  1
  •   carpinchosaurio    5 年前

    正如hl'reb所提到的,您应该在post请求中添加正确的内容类型,因为您使用的是spring boot和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);});