无法将http发布请求发送到springboot

时间:2020-01-23 05:38:24

标签: java angular spring-boot http

当我从角度应用程序向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());
    }
  }

4 个答案:

答案 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)

是否有不添加producesconsumes属性的原因?

@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应用程序响应的媒体类型与接受客户头。请尝试以下方法。

  1. 将Produces的值更改为 MediaType.APPLICATION_JSON ,因为您在客户端中将标头接受为“ application / json”。另外请注意:

不赞成使用APPLICATION_JSON_UTF8,而建议使用APPLICATION_JSON

参考:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/MediaType.html

  1. 对于那些面临类似问题的人,您也可以检查Accept标头中是否有错字,因为我经常会遇到此问题。