You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot Rest接口异常:不支持Content-Type 'application/json;charset=UTF-8'

问题

向RestController发送POST或PUT请求时,抛出异常:Content-Type 'application/json;charset=UTF-8' is not supported。未使用Jackson(Stack Overflow同类问题多通过Jackson解决)。

已做排查:

  • 其他类似请求可正常工作,差异在于User相关类包含其他对象引用(List<AddressDto>、List<OrderDto>、CartDto),推测问题出在此处
  • 尝试过调试、移除校验注解,请求始终无法进入方法
  • 指定@PostMapping(consumes = "application/json;charset=UTF-8")无效
  • 移除这些对象引用后接口恢复正常

相关代码:

Controller代码

@RequestMapping("/api/v1/users")
@RestController
@RequiredArgsConstructor
@Validated
public class UserController {

private final UserService userService;

@PutMapping
@Validated(UserDto.OnUpdate.class)
public void save(@Valid @RequestBody UserDto userDto) {
    User user = UserMapper.INSTANCE.toEntity(userDto);
    userService.save(user);
}

@PostMapping
@Validated(UserDto.OnCreate.class)
public UserDto create(@Valid @RequestBody UserDto userDto) {
    User userToBeCreated = UserMapper.INSTANCE.toEntity(userDto);
    User user = userService.create(userToBeCreated);
    return UserMapper.INSTANCE.toDto(user);
}
}

UserDto代码

@Data
@JsonIgnoreProperties({"password", "passwordConfirmation"})
public class UserDto {

@Null(message = "Id must be null", groups = {OnCreate.class})
@NotNull(message = "Id must not be null", groups = {OnUpdate.class})
private Long id;

@NotNull(message = "Name is required", groups = {OnCreate.class, OnUpdate.class})
@Length(min = 3, max = 45, message = "Username must be between {min} and {max} characters", groups = {OnCreate.class, OnUpdate.class})
private String name;

@NotNull(message = "Email is required", groups = {OnCreate.class, OnUpdate.class})
@Length(min = 3, max = 45, message = "Email must be between {min} and {max} characters", groups = {OnCreate.class, OnUpdate.class})
@Email(message = "Email must be valid")
private String email;

@NotNull(message = "Phone number is required", groups = {OnCreate.class, OnUpdate.class})
@Length(min = 3, max = 45, message = "Phone number must be between {min} and {max} characters", groups = {OnCreate.class, OnUpdate.class})
private String phoneNumber;

@NotNull(message = "Password is required", groups = {OnCreate.class, OnUpdate.class})
@Length(min = 6, message = "Password must be longer than {min} characters", groups = {OnCreate.class, OnUpdate.class})
private String password;

@NotNull(message = "Password confirmation is required", groups = {OnCreate.class})
@Length(min = 6, message = "Password confirmation must be longer than {min} characters",    groups = {OnCreate.class})
private String passwordConfirmation;

private List<AddressDto> addresses;

private List<OrderDto> orders;

private CartDto cart;

private LocalDate createdAt;

public interface OnCreate {
}

public interface OnUpdate {
}
}

User实体类代码

@Data
public class User {

private Long id;
private String name;
private String email;
private String password;
private String passwordConfirmation;
private String phoneNumber;
private List<Address> addresses;
private List<Order> orders;
private Cart cart;
private LocalDateTime createdAt;
}
解决方案

核心原因是嵌套的DTO/实体类缺少对应的序列化/反序列化支持(Spring默认JSON处理依赖Jackson,即便未显式配置也会默认使用),以下是具体解决步骤:

  • 检查嵌套类的基础配置
    确保AddressDto、OrderDto、CartDto以及对应的Address、Order、Cart类都添加了@Data注解(或手动生成getter/setter),序列化/反序列化框架需要通过这些方法访问属性。如果嵌套类包含日期、枚举等特殊类型,需添加@JsonFormat等注解指定处理规则。

  • 确认JSON依赖完整性
    检查项目依赖是否包含spring-boot-starter-web(它默认集成Jackson核心包);若手动管理依赖,需确保jackson-databind、jackson-annotations、jackson-core三个包存在且版本一致。

  • 处理循环引用问题
    如果User与嵌套类(如Address)存在双向引用,会导致序列化失败。可在关联字段上添加@JsonIgnore,或用@JsonManagedReference/@JsonBackReference组合标记双向关系,避免循环解析。

  • 全局序列化配置(可选)
    若嵌套类有统一序列化需求,可创建全局配置类统一处理:

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Bean
        public ObjectMapper objectMapper() {
            ObjectMapper mapper = new ObjectMapper();
            // 配置Java 8日期类型序列化
            mapper.registerModule(new JavaTimeModule());
            mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            // 忽略请求中未知字段,避免反序列化失败
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            return mapper;
        }
    }
    

内容的提问来源于stack exchange,提问作者Ilya Lisov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:55:26