I am a beginner in Spring Boot and learning my way through.
How to fix 'HTTP-415' error, during POST request in REST web service using Spring Boot as below? I have tried @RequestMapping
annotation, @RequestParam
. @RequestParam
gives some other error 401. However, 415 is consistent with @RequestMapping
and @PostMapping
.
Issue with @PostMapping
request.
{
"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...................
While placing following request:
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>
it's clearly in postman you are sending information as form-urlencoded but in your controller, you are expecting a request body (e. json), so you need either change @RequestBody
to @ModleAtrributes
or send you information with header Content-type: application/json
Issue is Fixed by adding content header as application/json
Your controller needs no changes. Add consumes and produces to @RequestMapping
of your FeignClient
. It has worked out even without @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 {}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With