【发布时间】:2021-07-27 08:08:59
【问题描述】:
我有自定义 ObjectMapper bean 注释为 @Primary。
@Configuration
public class BeanConfig {
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jdk8Module());
objectMapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_ABSENT);
return objectMapper;
}
}
但是,当我尝试使用不同大小写的枚举来解析表单时,它给了我错误。
@RestController
@RequestMapping("/game")
public class GameController {
private final GameService gameService;
public GameController(GameService gameService) {
this.gameService = gameService;
}
@PostMapping("/create")
public ResponseEntity<?> createGame(
@AuthenticationPrincipal String id,
GameParametersForm gameParametersForm
) {
Result<String> result = gameService.createWebGameSession(id, gameParametersForm);
return result.toResponseEntity();
}
}
public class GameParametersForm {
private Mode mode;
public GameParametersForm(
Mode mode
) {
this.mode = mode;
}
public Mode getMode() {
return mode;
}
}
这里是 build.gradle
plugins {
id 'org.springframework.boot' version '2.4.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.12.2'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.2'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.2'
implementation 'javax.validation:validation-api:2.0.1.Final'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.security:spring-security-test'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
我试图声明 Jackson2ObjectMapperBuilder bean。它没有帮助。
知道可能会发生什么,或者我应该在哪里寻找问题?
【问题讨论】:
-
请添加您的 json 有效负载
-
@VovaBilyachat 我该怎么做?它是来自网页的表格。问题是当我在正确的情况下发送相同的枚举时它不会给我一个错误。
-
您不需要重新定义 bean,只需编辑
application.properties以启用所需的功能。见github.com/spring-projects/spring-boot/blob/main/… -
@andreoss
spring.jackson.mapper.accept-case-insensitive-enums=true属性也没有给出任何结果 -
所以我检查了杰克逊的问题mb。因为在我只在
application.properties中添加了功能之后,没有添加 ObjectMapper bean。并且 loggin 启用了 autowired ObjectMapper 的映射器功能,该功能已启用,但仍然存在同样的问题。
标签: java spring spring-boot