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

cotxawn7  于 2022-10-30  发布在  Spring
关注(0)|答案(7)|浏览(181)

当我在我的控制器类中使用@RequestBody时,出现以下异常。
但是我只需要对post方法使用@RequestBody
异常错误:发生于:不支持内容类型“application/json”
任何人都可以帮助如何解决这个问题..

f4t66c6m

f4t66c6m1#

您可以添加以下注解

@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>
kx7yvsdv

kx7yvsdv2#

我在我的单元测试中得到了这个,即使我在控制器方法上有所有正确的注解,并且我在我的请求中正确地设置了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 {
hwazgwia

hwazgwia3#

首先,请确保您有一个正确的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 );
    }
}

请求正文:

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

Postman :
Postman Post
希望对你有帮助!

k5hmc34c

k5hmc34c4#

尝试在@PutMapping中不使用使用者和生成器选项。

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

2izufjch5#

在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

e5nqia27

e5nqia276#

我也遇到了同样的问题。现在我通过以下步骤修复了它
在控制器中

@RequestMapping(consumes=MediaType.APPLICATION_JSON_VALUE)

在pom.xml中包含以下依赖项

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

cs7cruho7#

你在@RequestMapping中有consumes="application/json"属性吗?如果没有,请把它放在注解中,然后再试一次。另外,如果这不起作用,试着使用contentNegotiator,你可以在谷歌上搜索Spring的contentNegotiation

相关问题