ich gelernt, wie Json und java.util.Optional zusammen durch diesen Beitrag zu verwenden: https://medium.com/@harittweets/how-to-use-java-util-optional-and-json-together-12434f9d55b9#.r0kpo65f8@JsonFormat auf Optional Eigenschaft
Aber ich habe ein anderes Problem, wenn die Eigenschaft der Klasse in Typ Datum ist, und es muss sein formatiert. So verwende ich @JsonFormat:
public class UserBean extends BasicBean {
private String username;
private String password;
@JsonFormat(pattern = "yyyy-MM-dd")
private Optional<Date> dob;
// getter and setter
}
Ich benutze Frühling Boot für meine App, das ist die Konfiguration:
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan("com.hag.prj")
public class Application{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Configuration
public class ApplicationConfig {
@Bean
@Primary
public ObjectMapper objectMapper() {
return Jackson2ObjectMapperBuilder.json().serializationInclusion(JsonInclude.Include.NON_NULL)
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.modules(this.jdk8Module(), this.jsrModule(), this.parameterNamesModule()).build();
}
@Bean
public Module jdk8Module() {
final Jdk8Module jdk8Module = new Jdk8Module();
jdk8Module.configureAbsentsAsNulls(true);
return jdk8Module;
}
@Bean
public Module jsrModule() {
return new JavaTimeModule();
}
@Bean
public Module parameterNamesModule() {
return new ParameterNamesModule();
}
}
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<UserBean> create(UserBean userBean){
return ResponseEntity.ok(userBean);
}
}
Ich benutze erweiterte REST-Client zu testen, ist die Konfiguration wie folgt:
Das Ergebnis sieht wie folgt aus:
{
timestamp: "2017-03-12T23:22:20.237+0000"
status: 400
error: "Bad Request"
exception: "org.springframework.validation.BindException"
errors: [1]
0: {
codes: [4]
0: "typeMismatch.userBean.dob"
1: "typeMismatch.dob"
2: "typeMismatch.java.util.Optional"
3: "typeMismatch"
arguments: [1]
0: {
codes: [2]
0: "userBean.dob"
1: "dob"
defaultMessage: "dob"
code: "dob"
}
defaultMessage: "Failed to convert property value of type 'java.lang.String' to required type 'java.util.Optional' for property 'dob'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@com.fasterxml.jackson.annotation.JsonFormat java.util.Date] for value '1988-10-07'; nested exception is java.lang.IllegalArgumentException"
objectName: "userBean"
field: "dob"
rejectedValue: "1988-10-07"
bindingFailure: true
code: "typeMismatch"
}
message: "Validation failed for object='userBean'. Error count: 1"
path: "/user"
}
Ho w kann ich dieses Problem lösen
haben Sie diese auf den Klassenpfad? (maven deps) https://github.com/FasterXML/jackson-modules-java8 – Eugene
@Eugene Ja, ich habe – gianglaodai
ok ... funktioniert es dann für andere optionals? von einem anderen Typ als 'java.util.Date' – Eugene