如何在Spring MVC的JavaBean中将下划线样式查询字符串转换为camel样式属性?

时间:2015-05-15 03:10:51

标签: java spring spring-mvc

例如,这是一个Get请求:

  

获取:/ search?product_category = 1& user_name = obama

我想定义一个SearchRequest来接受查询字符串,所以我可以使用JSR 303 bean验证注释来验证参数,如下所示:

public class SearchRequest {
    @NotEmpty(message="product category is empty")
    private int productCategory;
    @NotEmpty(message="user name is empty")
    private int userName;
}

那么,杰克逊是否有类似@JsonProperty的东西将下划线样式转换为驼色风格?

2 个答案:

答案 0 :(得分:1)

您只有两个选项;

首先。让你的SearchRequest pojo带有注释值进行验证,但是有一个控制器POST方法接收pojo作为请求体作为JSON / XML格式。

public class SearchRequest {
    @NotEmpty(message="product category is empty")
    private int productCategory;
    @NotEmpty(message="user name is empty")
    private int userName;
}

public String search(@RequestBody @Valid SearchRequest search) {
    ...
}

二。在Controller方法签名中进行验证,消除pojo中的验证,但如果需要,仍然可以使用pojo。

public class SearchRequest {

    private int productCategory;

    private int userName;
}

public String search(@RequestParam("product_category") @NotEmpty(message="product category is empty") String productCategory, @RequestParam("user_name") @NotEmpty(message="user name is empty") String username) {
    ... // Code to set the productCategory and username to SearchRequest pojo.
}

答案 1 :(得分:0)

恕我直言,最简单的方法是使用额外的getter和setter。这确实是代码重复,但是如此微不足道,我发现它无害:

public class SearchRequest {
    private int productCategory;
    private String userName;
    @NotNull(message="product category is empty")
    public int getProduct_category() {
        return getProduct_category();
    }
    @NotEmpty(message="user name is empty")
    public String getUser_name() {
        return userName;
    }
    public void setProduct_category(int product_category) {
        productCategory = product_category;
    }
    public void setUser_name(String user_name) {
        userName = user_name;
    }
}

顺便说一句,我假设userName最好是一个字符串,对于一个整数属性,你实际上想要@NotNull ......