1 在Concroller中 @RequestParam 与无注解区别,
无注解的话从web层往service层传输时当不传参数将不会影响调用
有注解的话此注解默认是强制性要传递的参数,当然也可以设计非强质性
2 @RestController与@Controller @Conponent @Server区别
一个是有Rest风格的(请求get,保存post,修改put,删除delete)区别就在这里(这是错误的,但是保留)
restController是返回一个字符串 系统加上后缀进行跳转,另一个要借助类跳转
3 异步请求@RequestBody如何接收
我碰到一个问题是在前端封装json 在ajax中通过JSON.stringify(json)传输,传输中报415、400错误
415 请求类型错误ajax默认请求txt/html,而我是要传json如果不设置dataType="json"刚会报此类错误
400 错误,当服务器强制按某个字段进行传输时,客户端字段对应不上就会报此类错误,
记住要用JSON.stringify(json)进行传输,服务器无法解析对象但能解析字符串
403 错误我忘记了
=====================================ruo======================================
RestTemplate(重要)
这个方法是基于httpClient之上封装的一个类,她提供了getForObject postForObject getForEntity postForEntity和 exchange方法
这是基于AOP交互的三个重要的方法
getForObject 通过get请求获取实体对象
postForObject 通过post请求获取实体对象,允许设置请求送,如传递json时
getForEntity 她是getForObject的一个镜像,基于此类上封装了例如返回码(200码成功404未找到之类的)
postForEntity 同上
exchange方法 我着重介绍
参数 url(URI),method(GET POST PUT DELETE),HttpEntity,Class)
这里我只计httpEntity其它没什么可讲的
HttpEntity<String> formEntity = new HttpEntity<String>(json, headers);包涵了请求体与请求头
请求体从参数命名就知道这是一个json,用对远程调用,对方服务器封装成一个实体对象
请求头包涵请求信息,如我要传输json此处就必须要设置请求头为json
具体代码
HttpHeaders headers = new HttpHeaders(); String encodedToken = CookieUtil.getCookie(request, "userToken"); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); headers.setContentType(type); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); headers.add("Authorization",encodedToken );如果不设置请求头,对方服务器照样返回415错误或者400错误。