Jackson 2 Json反序列化只能使用显式Mapper

时间:2017-11-10 09:17:36

标签: json weblogic fasterxml jackson2 jackson-databind

我正在努力进行自动杰克逊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"}

在尝试将近一天之后(并搜索“整个”互联网)我完全陷入困境,不知道原因是什么。

0 个答案:

没有答案