快捷搜索:  汽车  科技

contenttype类型是什么?由contenttype引发的一次小错误

contenttype类型是什么?由contenttype引发的一次小错误private CommonRequestMsg comm; */ privatestaticfinallong serialVersionUID = -8448288200887137838L; /** * 通用请求信息(这也是一个实体,是一些公共参数,例如手机型号,app版本号之类的)

最近项目依然是在写服务端了,最近有写到服务端提供接口给客户端让其调用。

正如大家所知,我们一般在和服务器交互时候,所有的接口请求都会定义一个统一的规范,一般都是同一个实体,例如下面的一个类

[java] view plain copy

  1. publicclass GeneralRequestVo<T> implements Serializable{

  2. privatestaticfinallong serialVersionUID = -8448288200887137838L;

  3. /**

  4. * 通用请求信息(这也是一个实体,是一些公共参数,例如手机型号,app版本号之类的)

  5. */

  6. private CommonRequestMsg comm;

  7. /**

  8. * token(标识登录有效期的)

  9. */

  10. private String token;

  11. /**

  12. * 请求参数(这个其实才是具体的业务参数,泛型指定)

  13. */

  14. private T body;

  15. public CommonRequestMsg getComm() {

  16. return comm;

  17. }

  18. publicvoid setComm(CommonRequestMsg comm) {

  19. this.comm = comm;

  20. }

  21. public String getToken() {

  22. return token;

  23. }

  24. publicvoid setToken(String token) {

  25. this.token = token;

  26. }

  27. public T getBody() {

  28. return body;

  29. }

  30. publicvoid setBody(T body) {

  31. this.body = body;

  32. }

  33. }

我们客户端所有请求都会把这样子一个实体给服务端。然后看下服务端接口定义如下:

  • @RequestMapping(value = "/test" method = { RequestMethod.POST RequestMethod.GET})

  • public Map<String Object> test(@RequestBody GeneralRequestVo<Map> requestVo) {

  • //具体的业务逻辑被我删除掉了,这里相当于直接返回了一个空的json串“{}”

  • returnnew HashMap();

  • }

  • 然后我们ios的大哥为了简便直接用了postman模拟了网络请求,虽然接口可以请求到,但是@RequestBody出来的GeneralRequestVo对象的属性值都是null。然后我使用的是我自己的客户端请求的,然后这个对象的属性就是有值的。我俩的请求参数基本一致。但是为啥一个可以另外一个就是不可以呢?

    后来发现是我们的请求头有区别了。他在postman里面请求的时候没有指定contenttype了。但是我客户端呢?请看如下

    contenttype类型是什么?由contenttype引发的一次小错误(1)

    是的客户端用的网络请求框架默认指定了contenttype属性。标识我们是以json格式进行的请求。而用postman默认的是text/plain纯文本格式请求,所以服务端映射出来的对象的各个属性都是null了。以前还真的没有注意到过这个问题。

    猜您喜欢: