我正在为自动杰克逊 json 反序列化而苦苦挣扎。我的要求是正确反序列化具有所有小写属性名称(或与 bean 属性名称完全不同)的 json(带有驼峰表示法的 bean 属性)。
应用服务器: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(Person person)的第二个变体不工作。参数变量person不为空,但字段firstName / lastName均为空。
请求正文内容:
{"firstname":"Max","lastname":"Mustermann"}
在尝试了将近一天(并搜索“整个”互联网)之后,我完全被卡住了,不知道可能是什么原因。