Question: Below is my controller method definition

```
@Autowired
private HttpServletRequest request;

@PostMapping(path = "/abc")
public String createAbc(@RequestBody HttpServletRequest request)
        throws IOException {

    logger.info("Request body: "+request.getInputStream());

    return "abc";

}

```

All i want to do is print contents to request body.
But when i make a POST request i see below error: 

> 
> Type definition error: [simple type, class
>  javax.servlet.http.HttpServletRequest]; nested exception is
>  com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot
>  construct instance of `javax.servlet.http.HttpServletRequest` (no
>  Creators, like default construct, exist): abstract types either need
>  to be mapped to concrete types, have custom deserializer, or contain
>  additional type information\n at [Source: (PushbackInputStream); line:
>  1, column: 2]",
> 
> 
> 

I'm using Spring boot 2.x version.Any idea what's wrong in my code?

Answer: 
First, remove the `@Autowired` field. It's wrong and you're not using it anyway.

Now you have two choices:

1. Let Spring process the request body for you, by using the `@RequestBody` annotation:

```
@PostMapping(path = "/abc")
public String createAbc(@RequestBody String requestBody) throws IOException {
    logger.info("Request body: " + requestBody);
    return "abc";
}

```
2. Process it yourself, i.e. don't use the `@RequestBody` annotation:

```
@PostMapping(path = "/abc")
public String createAbc(HttpServletRequest request) throws IOException {
    StringBuilder builder = new StringBuilder();
    try (BufferedReader in = request.getReader()) {
        char[] buf = new char[4096];
        for (int len; (len = in.read(buf)) > 0; )
            builder.append(buf, 0, len);
    }
    String requestBody = builder.toString();
    logger.info("Request body: " + requestBody);
    return "abc";
}

```

Don't know why you'd use option 2, but you can if you want.
if you want to take it out easily:

```
private ObjectMapper objectMapper;

byte[] bytes = request.getInputStream().readAllBytes();

User u = objectMapper.readValue(bytes, User.class);

```