不支持获取内容类型“application / json”

时间:2015-04-15 12:39:48

标签: java spring spring-mvc resttemplate

当我在我的控制器类中使用@RequestBody时,我遇到异常。

但我只需要将@RequestBody用于post方法。

  

引起:org.springframework.web.HttpMediaTypeNotSupportedException:   内容类型'application / json'不受支持

任何人都可以帮助解决这个问题..

6 个答案:

答案 0 :(得分:2)

您可以添加此注释

@RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON)

或者说这个依赖

<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.4.3</version>
</dependency>

答案 1 :(得分:0)

你有消费=&#34; application / json&#34; @RequestMapping中的属性。如果没有,请将其放在注释中,然后尝试。此外,如果这个deosnt工作,尝试使用contentNegotiator,你可以谷歌它为springNegotiation spring。

答案 2 :(得分:0)

首先,确保使用正确的jackson版本:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.8.0</version>
 </dependency>
 <dependency>
     <artifactId>jackson-annotations</artifactId>
     <groupId>com.fasterxml.jackson.core</groupId>
     <version>2.8.0</version>
 </dependency>

至于我,当我使用v2.7.6或v2.8.7的版本时。这个错误来找我!我改为v2.8.0,它运作良好!

其次,请确保您的控制器代码:

@RestController
@RequestMapping(value = "/user", produces = {MediaType.APPLICATION_JSON}, consumes = {MediaType.APPLICATION_JSON})
public class UserController extends GenericController<User, String> {

    @RequestMapping(method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED)
    public ResponseMessage add(@RequestBody User user) {
       String id = getService().insert(user);
       return ResponseMessage.created(id );
    }
}

RequestBody:

{
    "username":"123",
    "password":"123",
    "name":"123",
    "phone":"123",
    "email":"123@qq.com",
    "status":1
}
邮递员:

Postman Post

希望它可以帮到你!

答案 3 :(得分:0)

即使我在Controller方法上具有所有正确的批注,并且在请求中正确设置了Content-Type,我仍在单元测试中得到了这一点。

错误- Caused by: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json' not supported

调试AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters之后,我意识到没有支持application/json的注册消息转换器。

@AutoConfigureMockMvc不会注册所有转换器,但是@WebMvcTest会注册。
我更改了测试注释,问题得以解决。

以前我在使用-

@SpringJUnitWebConfig
@ContextConfiguration
@AutoConfigureMockMvc
public class ReportControllerTests {

现在使用@WebMvcTest来注册其他消息转换器。

@SpringJUnitWebConfig
@ContextConfiguration
@WebMvcTest(controllers = ReportController.class)
public class ReportControllerTests {

答案 4 :(得分:0)

在@PutMapping中不使用消费者和生产者选项的情况下尝试。

@PutMapping(value = "/lists/{ListName}/item")

答案 5 :(得分:0)

在 pom.xml 中添加 jackson-databind 解决了我的问题:

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.1</version>
        </dependency>

没有需要添加消费: consumes = MediaType.APPLICATION_JSON_VALUE