Невозможно отправить http-запрос на Springboot - PullRequest
0 голосов
/ 23 января 2020

Когда я отправляю HTTP-пост-запрос в API Spring Boot Rest из моего приложения angular, запрос не выполняется с ошибкой ниже

Ошибка браузера

    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

Ошибка консоли весенней загрузки

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]
        .......

Что я пробовал до сих пор

Как упомянуто это решение, я добавили необходимые заголовки в запрос от angular end

this.http.post(ipUrl, args, { headers: new HttpHeaders({'Content-Type': 'application/json', 'Accept': 'application/json', 'Access-Control-Allow-Headers': 'Content-Type'})});

Поскольку этот ответ, я добавил 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 ]

3 голосов
/ 23 января 2020

Ваш возвращаемый объект должен быть правильно преобразован в JSON. Добавьте Джексона к себе (отдельно от стартовой паутины) и повторите попытку.

 <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.2</version>
</dependency>
0 голосов
/ 23 января 2020

Согласно вашему недавнему редактированию, теперь вы получаете 406 Недопустимо , чтобы исправить эту ошибку, оставьте тип носителя в ответе вашего загрузочного приложения Spring таким же, как заголовок Accept вашего клиента. Попробуйте следующее.

  1. Измените значение продукции на MediaType.APPLICATION_ JSON, поскольку вы приняли заголовок в клиенте как "application / json". Также обратите внимание:

APPLICATION_JSON_UTF8 устарела в пользу APPLICATION_ JSON

Ссылка: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/MediaType.html

Для тех, кто сталкивается с подобной проблемой, вы также можете проверить наличие опечаток в заголовке Accept, поскольку я часто сталкиваюсь с этой проблемой.
0 голосов
/ 23 января 2020

Есть ли причины не добавлять свойства 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>
0 голосов
/ 23 января 2020

Не могли бы вы написать свой контроллер таким образом. и посмотрите, отвечает ли он.

 @ResponseBody
 @RequestMapping(value = "/login",
        method = RequestMethod.POST)
 public  ResponseWrapper<WebUser> login(...){
     .
     .
     .
  }

Есть ли причина, по которой вы не хотите использовать RequestMapping?

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