spring-mvc 接收参数下划线开头, 没有自动反射到实体类

long_ai_xin 发布于 2017/12/06 14:46
阅读 1K+
收藏 0

如题, 跟客户对接接口,客户的一个字段是下划线开头,导致只能用request.getParameter取出来,很多字段, 只有这个不行, 求解有没有人遇到过,怎么解决;

postman, 模拟提交, 

Content-Type="application/x-www-form-urlencoded"

body里面也选择 "x-www-form-urlencoded",

参数: user=123,_name_char=2343;

实体类,

public class User {
   private String user;
   private Sting _name_char;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String get_name_char() {
        return _name_char;
    }

    public void set_name_char(String _name_char) {
        this._name_char = _name_char;
    }


}

post请求, 结果参数进来, user有值,_name_char没有值;

 

关于改字段名字就不要说了, 跟对方调接口,人家不会改的. 对方已经生产在用的,而且对接了很多公司,不太可能为了我们改动.

加载中
1
Codermecn
Codermecn

参考这个吧

http://blog.csdn.net/zgzczzw/article/details/53912966

long_ai_xin
long_ai_xin
解决了, 没这么复杂.在楼下我有写.
1
long_ai_xin
long_ai_xin

解决了, 找到问题是: WebDataBinder#checkFieldMarkers 把"_name_char"="123" 去掉,增加了"name_char"=null, 官方文档说是为了html的select和checkbox, 具体有什么关系没看出来;

解决方案:  WebDataBinder 可以设置属性;

在controller层, 增加: 

@InitBinder
protected void initBinder(WebDataBinder binder) {
    // _input_charset 会变成 input_charset,并且value=null, 这里处理
    binder.setFieldMarkerPrefix(null);

}
AlbertWx
AlbertWx
楼主厉害,学习了
0
哎码
哎码

接受实体确实接不到_开头的参数,只能在request里面取了

0
long_ai_xin
long_ai_xin

引用来自“哎码”的评论

分别试了http://localhost:8080/test?name=123&_name_char=123

和postman

都没有问题

我不是一个字段一个字段, 我是封装成一个对象啊, 对象里面的字段就没了.接口的参数是对象

哎码
哎码
那就从request里面取,或者手写一个拦截器,把命名改了
0
meco
meco
_name_char字段上加注解JsonProperty,指定名称影射试试。 或者单独request取出再set对象里面
long_ai_xin
long_ai_xin
解决了, 在楼下我有写.
long_ai_xin
long_ai_xin
回复@meco : org.springframework.web.bind.WebDataBinder#checkFieldMarkers 这里_开头的参数全部去掉了_,并且值设为了空, spring为什么这样还没看明白.
long_ai_xin
long_ai_xin
回复@meco : 目前就是request单独取出来的. 加注解的方式也用了,没有用, 是还需要配置什么吗?
0
y
yan_liu

用的ssm吗?如果是,先设计好数据库,然后用generator 自动生成实体类https://my.oschina.net/u/3677751/blog/1531390

long_ai_xin
long_ai_xin
@yan_liu 回复@yan_liu : 看到了, 好像不能改. 只能这样看了
y
yan_liu
回复 @long_ai_xin : 拼写错了,你看一下String你写成了Sting
long_ai_xin
long_ai_xin
回复@yan_liu : 跟数据库有什么关系, 跟其他平台对接口
返回顶部
顶部