9

I got the following @RestController inside a spring boot application :

@Data
@RestController
public class Hello {

    @Autowired
    private ResturantExpensesRepo repo;

    @RequestMapping(value = "/expenses/restaurants",method = RequestMethod.POST,consumes =MediaType.APPLICATION_JSON_VALUE ,
            headers = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public void hello(@RequestBody ResturantExpenseDto dto)
    {
        Logger logger = LoggerFactory.getLogger("a");
        logger.info("got a request");

        ResturantExpenseEntity resturantExpenseEntity = new ResturantExpenseEntity();
        resturantExpenseEntity.setDate(new Date(System.currentTimeMillis()));
        resturantExpenseEntity.setName(dto.getName());
        resturantExpenseEntity.setExpense(dto.getExpense());
        repo.save(resturantExpenseEntity);
    }
}

When I try to send request from restClient/RestedClient (both addons of mozila) I get the following error :

{ "timestamp": 1512129442019, "status": 415, "error": "Unsupported Media Type", "message": "Content type 'text/plain;charset=UTF-8' not supported", "path": "/expenses/restaurants" }

This eror states that the end point doesnt support Json content,But I did put

consumes =MediaType.APPLICATION_JSON_VALUE

inside @RequestMapping annotation

What am I missing?

nadavgam
  • 1,452
  • 3
  • 15
  • 31
  • 3
    No the error didn't state the endpoint doesn't support JSON. It state that it doesn't support text/plain. Content Type of json is application/json. Specify content type in your mozilla addons as application/json and it should be fine – Yannic Klem Dec 01 '17 at 12:53
  • @YannicKlem I can't change client side how to support this Mediatype server side. – jeevs May 31 '18 at 07:39
  • I know but you said that the error states, that the endpoint does not support json. That is wrong. The error sais that it does nkt Support text/plain. So your request that you're sending client side has not the correct content-type Header. – Yannic Klem May 31 '18 at 20:24
  • please try to request like this: curl -X PUT -H 'Content-Type: application/json' -i http://localhost:8080/spring-rest/api/employees/500 --data '{ "name": "abc", "email": "abc.a@gmail.com", "salary": 10000 }' – prashant.kr.mod Sep 04 '19 at 04:32

4 Answers4

5

Late response but I had the same problem posting the answer it might be useful to someone so I installed Postman and then just change your Content-Type to application/json

Tarek
  • 480
  • 4
  • 11
5

If the request is made like this: then it will resolve the issue.

curl -X PUT -H 'Content-Type: application/json' -i http://localhost:8080/spring-rest/api/employees/500 --data '{
  "name": "abc",
  "email": "abc.a@gmail.com",
  "salary": 10000
}'

I see the headers are proper: headers = MediaType.APPLICATION_JSON_VALUE
but when the request is made, at that time we need to inform the handler that its a application/json mime type.

prashant.kr.mod
  • 721
  • 6
  • 23
0

if you are using html with ajax.Check the request header and the payload. Make sure the ajax has the following fields

                url : your url
                type : 'post',
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data : JSON.stringify( your payload )

if the ajax call has the following fields remove them and try again

         processData : false,
         contentType : false,
mumbasa
  • 114
  • 8
-1

This is late too, but in RESTClient(Mozilla addon), you can add Content-Type: application/JSON from the Headers dropdown menu and even at the response side change it to JSON format

pavankumar
  • 157
  • 2
  • 10
Chin Hsu
  • 11
  • 1