当我在我的控制器类中使用@RequestBody
时,我遇到异常。
但我只需要将@RequestBody
用于post方法。
引起:org.springframework.web.HttpMediaTypeNotSupportedException: 内容类型'application / json'不受支持
任何人都可以帮助解决这个问题..
答案 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
}
邮递员:
希望它可以帮到你!
答案 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