Как исправить ошибку "HTTP-415" во время запроса POST в веб-сервисе REST с использованием весенней загрузки

Я новичок в Spring Boot и изучаю свой путь.

Как исправить ошибку "HTTP-415" во время запроса POST в веб-службе REST с использованием Spring Boot, как показано ниже? я пытался @RequestMapping аннотаций, @RequestParam, @RequestParam дает некоторую другую ошибку 401. Однако 415 согласуется с @RequestMapping а также @PostMapping,

Проблема с @PostMapping запрос.

{
    "timestamp": "2018-12-31T18:29:36.727+0000",
    "status": 415,
    "error": "Unsupported Media Type",
    "message": "Content type 'text/plain;charset=UTF-8' not supported",
    "trace": "org.springframework.web.HttpMediaTypeNotSupportedException: Content type 
    'text/plain;charset=UTF-8' not supported\r\n\tat 
    org.springframework.web.servlet.mvc.method.annotation.
    AbstractMessageConverterMethodArgumentResolver.
    readWithMessageConverters
    (AbstractMessageConverterMethodArgumentResolver.java:224)\r\n\tat 
     org.springframework.web.servlet.mvc.method.annotation.
     RequestResponseBodyMethodProcessor.
     readWithMessageConverters(RequestResponseBodyMethodProcessor.java:157)
     \r\n\tat org.springframework.web.servlet.mvc.method.
     annotation.RequestResponseBodyMethodProcessor.
     resolveArgument(RequestResponseBodyMethodProcessor.java:130)
     \r\n\tat...................

При размещении следующего запроса:

StudentController.java

@RestController
public class StudentController {
    @Autowired
    private StudentService studentService;
    :
    :

    @PostMapping("/students/{studentId}/courses")
    public ResponseEntity<Void> registerStudentForCourse(
            @PathVariable String studentId,
            @RequestBody Course newCourse) {
        Course course = studentService.addCourse(studentId, newCourse);

        if (course == null)
            return ResponseEntity.noContent().build();

        URI location = ServletUriComponentsBuilder.fromCurrentRequest().
                path("/{id}").buildAndExpand(course.getId()).toUri();

        return ResponseEntity.created(location).build();
    }

StudentService.java

@Component
public class StudentService {
    :
    :
    public Course addCourse(String studentId, Course course) {
        Student student = retrieveStudent(studentId);

        if (student == null) {
            return null;
        }

        String randomId = new BigInteger(130, random).toString(32);
        course.setId(randomId);

        student.getCourses().put(course.getId(), course);

        return course;
    }

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.1.1.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.in28minutes.springboot</groupId>
 <artifactId>student-services</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>student-services</name>
 <description>Demo project for Spring Boot</description>
 <properties>
  <java.version>1.8</java.version>
 </properties>
 <dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>
<build>
 <plugins>
     <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
 </plugins>
 </build>
</project>

3 ответа

Решение

Ясно , что в почтальоне вы отправляете информацию в виде кодов в форме, но в вашем контроллере вы ожидаете тело запроса (например, json), поэтому вам нужно либо изменить @RequestBody в @ModleAtrributes или отправить вам информацию с заголовком Content-type: application/json

Исправлена ​​проблема с добавлением заголовка контента как application/json

Ваш контроллер не требует изменений. Добавьте потребление и производство к @RequestMappingвашей FeignClient. Получилось даже без @Headers:

      @FeignClient(name = "myFeignClient", url = "${com.example.url}", configuration = FeignConfiguration.class)
@RequestMapping(value = "feign-my", consumes = "application/json", produces = "application/json")
//@Headers({ACCEPT + ": " + APPLICATION_JSON_VALUE, CONTENT_TYPE + ": " + APPLICATION_JSON_VALUE})
public interface MyFeignClient extends MyController {}
Другие вопросы по тегам