总结:

@JsonAlias:序列化出来是一定是真名,反序列化时可以传真名(驼峰)Json也可以传别名(下划线)Json

@JsonProperty:序列化出来一定是别名,反序列化时也只能传别名Json

 

真名Json:{"userName":"小李飞刀","userSex":true,"userAge":18}

别名Json:{"user_name":"小李飞刀","user_sex":true,"user_age":18}

 

==========================================================================

1.首先研究 @JsonAlias

public class UserInfo {

    @JsonAlias("user_name")
    private String userName;

    @JsonAlias("user_sex")
    private Boolean userSex;

    @JsonAlias("user_age")
    private Integer userAge;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Boolean getUserSex() {
        return userSex;
    }

    public void setUserSex(Boolean userSex) {
        this.userSex = userSex;
    }

    public Integer getUserAge() {
        return userAge;
    }

    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }
}
public class TestMain {

    public static void main(String[] args) throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();

        UserInfo userInfo = new UserInfo();
        userInfo.setUserName("小李飞刀");
        userInfo.setUserAge(18);
        userInfo.setUserSex(true);

        System.out.println(objectMapper.writeValueAsString(userInfo));
    }
}

 

 

试下反序列化:

 

public class TestMain2 {
    public static void main(String[] args) throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();

        String json = "{\"userName\":\"小李飞刀\",\"userSex\":true,\"userAge\":18}";

        UserInfo userInfo = objectMapper.readValue(json, UserInfo.class);

        System.out.println(userInfo.getUserName());
        System.out.println(userInfo.getUserSex());
        System.out.println(userInfo.getUserAge());
    }
}

 

 

 

把json串,变成这样,看他能否反序列化成功。
{
"user_name":"小李飞刀","user_sex":true,"user_age":18}

 

 

public class TestMain2 {
    public static void main(String[] args) throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();

        String json = "{\"user_name\":\"小李飞刀\",\"user_sex\":true,\"user_age\":18}";

        UserInfo userInfo = objectMapper.readValue(json, UserInfo.class);

        System.out.println(userInfo.getUserName());
        System.out.println(userInfo.getUserSex());
        System.out.println(userInfo.getUserAge());
    }
}

 

 

 

 

1.接下来研究 @JsonProperty

public class UserInfo {

    @JsonProperty("user_name")
    private String userName;

    @JsonProperty("user_sex")
    private Boolean userSex;

    @JsonProperty("user_age")
    private Integer userAge;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Boolean getUserSex() {
        return userSex;
    }

    public void setUserSex(Boolean userSex) {
        this.userSex = userSex;
    }

    public Integer getUserAge() {
        return userAge;
    }

    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }
}

看下序列化:

public class TestMain {

    public static void main(String[] args) throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();

        UserInfo userInfo = new UserInfo();
        userInfo.setUserName("小李飞刀");
        userInfo.setUserAge(18);
        userInfo.setUserSex(true);

        System.out.println(objectMapper.writeValueAsString(userInfo));


    }
}

 

 

再看下反序列化:

public class TestMain2 {
    public static void main(String[] args) throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();

        String json = "{\"userName\":\"小李飞刀\",\"userSex\":true,\"userAge\":18}";

        UserInfo userInfo = objectMapper.readValue(json, UserInfo.class);

        System.out.println(userInfo.getUserName());
        System.out.println(userInfo.getUserSex());
        System.out.println(userInfo.getUserAge());
    }
}

 

 

 

 

 修改成下划线再试:

public class TestMain2 {
    public static void main(String[] args) throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();

        String json = "{\"user_ame\":\"小李飞刀\",\"user_sex\":true,\"user_age\":18}";

        UserInfo userInfo = objectMapper.readValue(json, UserInfo.class);

        System.out.println(userInfo.getUserName());
        System.out.println(userInfo.getUserSex());
        System.out.println(userInfo.getUserAge());
    }
}

 

 

 

 

 

 

 ==================================================================================================================================================

上面研究了在 main方法 执行的结果,接下来用最接近使用场景的来测试 建立一个 controller UserInfo 做入参。

1.还是老方法先测试 @JsonAlias

public class UserInfo {

    @JsonAlias("user_name")
    private String userName;

    @JsonAlias("user_sex")
    private Boolean userSex;

    @JsonAlias("user_age")
    private Integer userAge;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Boolean getUserSex() {
        return userSex;
    }

    public void setUserSex(Boolean userSex) {
        this.userSex = userSex;
    }

    public Integer getUserAge() {
        return userAge;
    }

    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }
}

  

用这2个Json入参,做测试:

{"userName":"小李飞刀","userSex":true,"userAge":18}

{"user_name":"小李飞刀","user_sex":true,"user_age":18}

 

@RestController
public class JsonAliasController {

    @PostMapping("/JsonAlias")
    public UserInfo go(@RequestBody UserInfo userInfo){
        System.out.println(userInfo.getUserName());
        System.out.println(userInfo.getUserAge());
        System.out.println(userInfo.getUserSex());
        return userInfo;
    }
}

 

 

 

 

 

 

 

接下来换做下划线做入参,看下反序列化的结果:

 

 

 

 

 

 

 

2.好了,接下来再来研究一下@JsonProperty

 

public class UserInfo {

    @JsonProperty("user_name")
    private String userName;

    @JsonProperty("user_sex")
    private Boolean userSex;

    @JsonProperty("user_age")
    private Integer userAge;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Boolean getUserSex() {
        return userSex;
    }

    public void setUserSex(Boolean userSex) {
        this.userSex = userSex;
    }

    public Integer getUserAge() {
        return userAge;
    }

    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }
}

 

 

@RestController
public class JsonPropertyController {

    @PostMapping("/JsonProperty")
    public UserInfo go(@RequestBody UserInfo userInfo){
        System.out.println(userInfo.getUserName());
        System.out.println(userInfo.getUserAge());
        System.out.println(userInfo.getUserSex());
        return userInfo;
    }
}

 

 

 

 

 

 

 

再来试一下 下划线别名:

 

 

 

 

==============================================================================================================================================

接下来是针对各个电商平台的接口,让传Bean的情况,首先要明确一点,各个平台官网上的文档是假象,看似是传 Bean,其实就是一个 json字符串,而且更变态的是这个Json字符串还必须是下划线格式的!

以下是聊天记录截图,作为以后遇到问题了看:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2020-09-13 15:05  del88  阅读(168)  评论(0编辑  收藏  举报