我正在努力进行自动杰克逊json反序列化。我的要求是具有所有小写属性名称(或完全不同于bean属性名称)的json被正确反序列化(带有驼峰大小写表示法的bean属性)。
Application Server:Weblogic 12.2.1
示例json应该可以工作:
{"firstname":"Max","lastname":"Mustermann"}
依赖关系:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.2</version>
<type>jar</type>
</dependency>
豆
import com.fasterxml.jackson.annotation.JsonProperty;
public class Person {
@JsonProperty("firstname")
private String firstName;
@JsonProperty("lastname")
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
ApplicationConfig(从Netbeans自动生成)
@ApplicationPath("webresources")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<>();
addRestResourceClasses(resources);
return resources;
}
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(at.eurotours.exportService.jaxrs.resource.PersonResource.class);
}
}
资源
@Path("person")
public class PersonResource {
@POST
@Path("/person1")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public Response getPerson1(String requestBody) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Person person = mapper.readValue(requestBody, Person.class);
return Response.ok((String) person.getFirstName()).build();
}
@POST
@Path("/person2")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public Response getPerson2(Person person) {
return Response.ok((String) person.getFirstName()).build();
}
}
getPerson1(String requestBody)的第一个变体正在运行,但第二个 getPerson2(人员)没有。参数变量人不为空,但字段 firstName / lastName 均为空。
requestBody 内容:
{"firstname":"Max","lastname":"Mustermann"}
在尝试将近一天之后(并搜索“整个”互联网)我完全陷入困境,不知道原因是什么。