java 响应 请求参数_spring基础----请求与响应的参数(一)
這里面我們主要介紹一下spring中關于請求和響應參數數據的問題。愛,從來就是一件千回百轉的事。不曾被離棄,不曾受傷害,怎懂得愛人?愛,原來是一種經歷。
spring中的請求與響應
一、spring中json格式的post請求
客戶端發送json格式的數據,例如以下的user對象的信息是我們要插入到數據庫中的。
{"userId": "huhx1","username": "linux1","passowrd": "pwd11","sex": "0","phoneNumber": "15527100207","address": "wuhan1","birthday": "2017-12-12"}
我們的controller處理方法中的參數可以用Bean接收,也可以使用Map。如下:
@PostMapping("user3")public ResponseBeaninsertUser(@RequestBody User user) {
logger.info("user = {}", user);
userMapper.insertUser(user);returnResultUtil.success(user);
}
@PostMapping("user4")public ResponseBean> insertUser(@RequestBody Mapuser) {
logger.info("map = {}", user);
userMapper.insertMapUser(user);returnResultUtil.success(user);
}
需要注意的是參數必須要用@RequestBody注解,否則請求的參數是不能正確的注入到參數的類中。關于這個注解和@ResponseBody差不多的功能,就是可以將我們的請求或者響應的數據通過HttpMessageConverters類轉換成我們想要的類型(被注解的類型)。官方文檔說明如下:
1、@RequestBody annotated parameters for access to the HTTP request body. Parameter values are converted to the declared method argument type usingHttpMessageConverters.2、If the method is annotated with @ResponseBody, the return type is written to the response HTTP body. The return value will be converted to the declared method argument type usingHttpMessageConverters.3、@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
對于json格式的傳遞參數,使用@RequestParam也無法正確傳遞參數。例如像下面的這種:
請求的json數據如下:
{"type": "file","content": "huhx.txt"}
下面是我們的java代碼
@PostMapping("javasql")public String generateJavaBean2(@RequestParam String type, @RequestParam String content) {}
而且對于這種有兩個參數的話,使用@RequestBoby注解兩個參數的話,也會報錯的。
Required request body is missing: public java.lang.String com.linux.huhx.generate.db.MysqlBeanAction.generateJavaBean2(java.lang.String,java.lang.String) throws java.io.IOException
正確的做法應該如下:
public String generateJavaBean2(@RequestBody Map map) throwsIOException {
String type= map.get("type");
String content= map.get("content");
}
二、spring中表單格式的post請求
如果是表單形式的post請求,那么不需要@RequestBody注解。直接在controller對應方法的參數中注明該類就可以,在postman中如果birthday輸入的是2017-12-12。會報string不能轉換成date的錯,這里面如果一定要支持2018-12-12字符串格式的時間傳遞,可以使用spring自定義的converter或者formatter接口的實現類。具體可以參考博客:
上述測試的java代碼
@PostMapping("user3")public ResponseBeaninsertUser(User user) {
logger.info("user = {}", user);
userMapper.insertUser(user);returnResultUtil.success(user);
}
在使用JSON.toJSONString(this);格式化對象控制臺中輸出的結果如下:
user = {"birthday":1513653098000,"password":"12345","phoneNumber":"2222","sex":1,"userId":"huhx3","username":"huhx3"}
我們返回的數據都是json格式的,這是因為我們在注解控制器的時候用的是@RestController注解。上述也提到過了,它是@Controller和@ResponseBody的復合注解。可以在它的源碼中找到:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBodypublic @interfaceRestController {
String value()default "";
}
三、spring中表單的get請求
get傳遞參數的方式,我們的java代碼如下:
@GetMapping("getRequest1")public ResponseBeangetRequest1(String username) {
logger.info("username = {}", username);returnResultUtil.success(username);
}
我們通過postman發送get請求,url為:localhost:9998/mapper/getRequest1?username=huhx。返回的結果如下:
{"returnCode": 0,"returnMessage": "成功","response": "huhx"}
可以看到成功的接收到了get的請求參數,當然也可以使用@RequestParam修改參數的名稱。如下:
@GetMapping("getRequest1")public ResponseBean getRequest1(@RequestParam("username") String name) {
logger.info("username = {}", name);returnResultUtil.success(name);
}
get請求路徑上的參數
@GetMapping("getRequest2/{username}")public ResponseBean getRequest2(@PathVariable("username") String name) {
logger.info("username = {}", name);returnResultUtil.success(name);
}
如果像上述url參數的那樣,省略@PathVariable注解,使用下面的這種方式將會失效得不到傳遞的參數。
@GetMapping("getRequest2/{username}")public ResponseBeangetRequest2(String username) {
logger.info("username = {}", username);returnResultUtil.success(username);
}
友情鏈接
總結
以上是生活随笔為你收集整理的java 响应 请求参数_spring基础----请求与响应的参数(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java注解封装默认值_Java注解默认
- 下一篇: java io流printstream_