0

我正在为自动杰克逊 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"}

在尝试了将近一天(并搜索“整个”互联网)之后,我完全被卡住了,不知道可能是什么原因。

4

0 回答 0