当我从角度应用程序向Spring Boot Rest API发送HTTP发布请求时,请求失败,并显示以下错误
浏览器错误
HTTP Status 415 – Unsupported Media Type
Type Status Report
Description: The origin server is refusing to service the request because the payload is in a format
not supported by this method on the target resource
Spring启动控制台错误
java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.LinkedHashMap
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:187) ~[spring-webmvc-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:203) ~[spring-webmvc-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81) ~[spring-web-4.3.8.RELEASE.jar:4.3.8.RELEASE]
.......
到目前为止我尝试过的事情
如this解决方案所述,我已将所需的标头添加到来自角端的请求中
this.http.post(ipUrl, args, { headers: new HttpHeaders({'Content-Type': 'application/json', 'Accept': 'application/json', 'Access-Control-Allow-Headers': 'Content-Type'})});
作为this的答案,我已经向模型对象添加了getters/setters
我想知道哪里出了问题以及如何解决此问题?
更新
Springboot Rest Controller方法
@PostMapping("/login")
public @ResponseBody ResponseWrapper<WebUser> login(@RequestBody LoginData loginData){
try {
return loginService.loginProcess(loginData);
}
catch (Exception ex){
ProgrammerAlert.printStackTrace(ex);
return new ResponseWrapper<>(ResponseWrapper.ERROR, ex.getMessage());
}
}
答案 0 :(得分:0)
您可以用这种方式编写控制器吗?看看它是否响应。
{
"Code": "BadRequest",
"Message": "The parameter LinuxFxVersion has an invalid value.",
"Target": null,
"Details": [
{
"Message": "The parameter LinuxFxVersion has an invalid value."
},
{
"Code": "BadRequest"
},
{
"ErrorEntity": {
"ExtendedCode": "01007",
"MessageTemplate": "The parameter {0} has an invalid value.",
"Parameters": [
"LinuxFxVersion"
],
"Code": "BadRequest",
"Message": "The parameter LinuxFxVersion has an invalid value."
}
}
],
"Innererror": null
}
是否有不想使用RequestMapping的原因?
答案 1 :(得分:0)
是否有不添加produces
和consumes
属性的原因?
@PostMapping("/login", produces = MediaType.APPLICATION_JSON_UTF8, consumes = MediaType.APPLICATION_JSON_UTF8)
public @ResponseBody ResponseWrapper<WebUser> login(@RequestBody LoginData loginData){
try {
return loginService.loginProcess(loginData);
}
catch (Exception ex){
ProgrammerAlert.printStackTrace(ex);
return new ResponseWrapper<>(ResponseWrapper.ERROR, ex.getMessage());
}
}
或
您是否添加了任何JSON消息转换器,例如杰克逊?检查您的应用程序是否具有以下依赖性
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
答案 2 :(得分:0)
您的返回对象应正确转换为JSON。将Jackson添加到您的pom中(独立于入门网站),然后重试。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
答案 3 :(得分:0)
根据您最近的修改,您现在得到 406不可接受,要解决此错误,请使Spring Boot应用程序响应的媒体类型与接受客户头。请尝试以下方法。
不赞成使用APPLICATION_JSON_UTF8,而建议使用APPLICATION_JSON
参考:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/MediaType.html