415 Unsupported MediaType for POST request in spring application
Accept Header might be the issue.As far as i remember, when you send a request via curl it adds a default header accept : */*
But in case of JSON you have to mention the accept header
as accept : application/json
similarly you have mentioned the content-Type.
And little more, i dont know what is that, but don't you think you have to place "request mappings" like that
@RequestMapping(value="/sample" ...@RequestMapping(value="/sample2" ...
This may not be the case, but accept header is the thing, i think is the main issue.
Solution 2
Since you have this code
public String getResponse2(@RequestBody Person person)
I have already faced this problem before and the solution two may help here
FormHttpMessageConverter which is used for @RequestBody-annotated parameters when content type is application/x-www-form-urlencoded cannot bind target classes as @ModelAttribute can). Therefore you need @ModelAttribute instead of @RequestBody
Either Use @ModelAttribute annotation instead of @RequestBody like this
public String getResponse2(@ModelAttribute Person person)
I provided the same answer to somebody and it helped.here is that answer of mine
I found the solution and I want to post here so it benefits others.
Firstly I need to include jackson in my classpath, which I added in build.gradle as follows:
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.5' compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.5' compile 'com.fasterxml.jackson.core:jackson-core:2.7.5'
Next, I have to change my AppConfig
which extends WebMvcConfigurerAdapter
as follows:
@Configuration@EnableWebMvc@ComponentScan("com.example.myApp")public class AppConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/test/**").addResourceLocations("/test/").setCachePeriod(0); registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0); registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(0); registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(0); } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new MappingJackson2HttpMessageConverter()); super.configureMessageConverters(converters); }}
That is all and everything worked nicely
can you trying using the -d option in curl
curl -H "Content-Type: application/json" -X POST -d '{"id":"1,"name":"sai"}' http://localhost:8095/myApp/service/example/sample2
Also, if you use windows you should escape double quotes
-d "{ \"id\": 1, \"name\":\"sai\" }"