当我尝试使用后端的API发布一个元素时,出现了一个无法解释的错误。API返回了一个错误,代码为415,与媒体类型有关:
无法加载资源:服务器以状态415()响应
我的后端返回此错误:
已解决处理程序执行导致的异常:org.springframework.web.HttpMediaTypeNotSupportedException:不支持内容类型“text/plain;charset=UTF-8”
编辑:Guru解决方案错误:
已解决处理程序执行导致的异常:org.springframework.web.HttpMediaTypeNotSupportedException:不支持内容类型“text/plain”
令人讨厌的是,我在请求中添加了以下标题:
Content-Type:application/JSON
并且正文被正确解析为JSON格式。
我使用的是Angular 5
,我的后端是用Spring
开发的。
Angular 客户端代码:
postProject(project: Project) {
const headers: HttpHeaders = new HttpHeaders();
headers.append('Content-Type', 'application/json');
return this.http.post('http://localhost:8443/projects', project.body(), {headers: headers})
.map(response => response);
}
字符串
其中body方法为:
body() {
const object = {
id: this.id,
name: this.name,
'num_execs': this.num_execs
};
return JSON.stringify(object);
}
型
Spring API代码:
@RequestMapping(value = "", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> addLocation(@RequestBody Project project) {
return new ResponseEntity<>(esProjectService.save(project), HttpStatus.OK);
}
型
其中,类的RequestMapping为/projects
:
@RestController
@RequestMapping("/projects")
public class ProjectResource {
@RequestMapping(value = "", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> addLocation(@RequestBody Project project) {
return new ResponseEntity<>(esProjectService.save(project), HttpStatus.OK);
}
... OTHER METHODS...
}
型
3条答案
按热度按时间dw1jzc5e1#
我已经讨论过了,解决这个问题的一种方法是指定类型@RequestPart(value =“nameOfResource”and consumes = {“multipart/form-data”}
不要忘记在Angular中指定Content的名称。我希望这会有所帮助。
下面是一个例子:
字符串
zwghvu4y2#
在angular 5中,
HttpHeaders
是不可变的。字符串
或
型
以这种方式设置头,它应该解决你的问题。我已经把示例代码只是为了解释你应该如何添加多个头。如果你不需要它,不要把
'X-XSRF-TOKEN'
。w51jfk4q3#
我认为错误来自于你想在发送纯文本的同时使用application / json。
字符串
而在前面的代码中,您发送纯文本/文本
型
只需删除JSON.stringify调用并返回json对象,一切都很好。
变化
型
到
型