Spring Rest应用POST请求报Content type 'application/json'不支持错误求助
解决POST创建用户时的415 Unsupported Media Type错误
嘿,咱们来搞定你遇到的这个415错误。我看了你的代码,发现几个关键问题,尤其是第一个,大概率就是直接诱因:
1. 赶紧移除Service层方法上的@RequestBody注解
你的UserService.createUser方法居然加了@Valid @RequestBody!这俩注解是Spring MVC控制器层专属的,用来把HTTP请求体绑定到方法参数上。Service层的方法只需要接收普通Java对象就行,完全不需要这俩注解。Spring看到Service方法上的@RequestBody后,会错误地尝试从当前请求里再解析一次请求体,但此时请求体已经被Controller层解析过了,直接就触发了媒体类型不支持的错误。
修改后的UserService代码应该是这样:
// 删掉@Valid和@RequestBody public User createUser(User user) { user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); user.setRoles(new HashSet<>(roleRepository.findAll())); return userRepository.save(user); }
2. 检查Jackson序列化依赖是否齐全
如果是Spring Boot项目,确保已经引入了spring-boot-starter-web依赖——它默认包含了Jackson的序列化/反序列化组件,这是Spring处理JSON请求体必需的。要是普通Spring项目,得手动加Jackson的核心依赖:
<!-- Maven示例,版本号选和你的Spring版本兼容的就行 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
3. 确保实体类能正常序列化/反序列化
虽然这不是直接导致415的原因,但为了避免后续踩坑,检查下你的User实体类:
- 确认所有字段都有对应的getter和setter方法(你说已经省略了,没问题)
- 对于
Date类型的字段,可以加Jackson的格式化注解,避免日期序列化出错:
@JsonFormat(pattern = "yyyy-MM-dd") @Column(name = "user_birth_date") @Temporal(TemporalType.DATE) private Date birth_date; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(nullable = false, updatable = false) @Temporal(TemporalType.TIMESTAMP) @CreatedDate private Date createdAt; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(nullable = false) @Temporal(TemporalType.TIMESTAMP) @LastModifiedDate private Date updatedAt;
4. 最后再确认下请求配置
虽然你说请求头和类型都对,但还是再核对一遍:
- 确保请求的Content-Type头确实是
application/json;charset=UTF-8,别写错大小写或者多打空格 - 检查请求体的JSON格式是否正确,字段名要和实体类的属性名匹配(比如实体类是
username,请求体里别写成userName,除非你加了@JsonProperty注解指定映射关系)
按照上面的步骤改完,再测试你的POST请求,应该就能解决这个415错误啦。
内容的提问来源于stack exchange,提问作者Ouissal
相关产品推荐
相关产品推荐

