javaee论坛

普通会员

225648

帖子

334

回复

348

积分

楼主
发表于 2017-06-26 06:46:44 | 查看: 225 | 回复: 2
在控制器里,使用@RequestParam可以将请求参数绑定到方法参数。如:

< class="ttyprint">@Controller@RequestMapping("/pets")@SessionAttributes("pet")public class EditPetForm { // ... @GetMapping public String setupForm(@RequestParam("petId") int petId, ModelMap model) { Pet pet = this.clinic.loadPet(petId); model.addAttribute("pet", pet); return "petForm"; } // ...}

使用@RequestParam的参数默认是必须提供的,不过也可以指定其为可选的,将@RequestParam的reqired属性设置false即可。如,@RequestParam(value="id", required=false))
如果方法参数的类型不是String,如上例中的是int,类型转换会自动执行。
如果将@RequestParam用于Map

@RequestBody映射请求体

@RequestBody注解参数表示该参数将与HTTP请求体绑定。如:

< class="ttyprint">@PutMapping("/something")public void handle(@RequestBody String body, Writer writer) throws IOException { writer.write(body);}

使用HttpMessageConverter将请求体转换为方法参数。HttpMessageConverter负责将请求信息转换为指定对象和将指定对象转换为请求体。RequestMappingHandlerAdapter默认支持@RequestBody使用以下HttpMessageConverters。
- ByteArrayHttpMessageConverter 转换为字节数组。
- StringHttpMessageConverter 转换为字符串。
- FormHttpMessageConverter 表单数据与 MultiValueMap

@ResponseBody映射响应体

@ResponseBody注解用在方法上,用来表示直接将返回数据写到HTTP响应体里。这样返回的数据不会放到Model中,也不会解析为视图名称。如:

< class="ttyprint">@RequestMapping(value = "/something", method = RequestMethod.PUT)@ResponseBodypublic String helloWorld() { return "Hello World";}

上述例子会将Hello World文本写到HTTP响应流中。
与@RequestBody一样,Spring使用HttpMessageConverter将返回对象转换为响应体。

@RestController创建REST控制器

有时我们会将控制器实现REST API,只会返回JSON、XML或其他自定义媒体类型。那我们就可以在控制器上添加@RestController注解,而不用在每一个@RequestMapping上使用@ResponseBody。
@RestController是一个结合了@ResponseBody和@Controller的注解。

HttpEntity

HttpEntity的用法类似于@RequestBody和@ResponseBody注解。除了可以访问请求/响应体,HttpEntity(和专门用于响应的子类ResponseEntity)还可以访问request和response的头字段。如:

< class="ttyprint">@RequestMapping("/something")public ResponseEntity<String> handle(HttpEntity<byte[]> requestEntity) throws UnsupportedEncodingException { String requestHeader = requestEntity.getHeaders().getFirst("MyRequestHeader")); byte[] requestBody = requestEntity.getBody(); // do something with request header and body HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set("MyResponseHeader", "MyValue"); return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);}

上述例子获取了MyRequestHeader头字段的值,以字节数组的形式读取了请求体,随后将MyRequestHeader添加到response,将Hello World写到响应流并设置响应状态码为201(Created)。
与@RequestBody和@ResponseBody一样,Spring使用HttpMessageConverter将数据与请求/响应流互转。


普通会员

0

帖子

301

回复

305

积分
沙发
发表于 2019-11-13 06:34:00

记录一下

普通会员

1

帖子

333

回复

342

积分
板凳
发表于 2022-05-11 03:24:20

百因必有果你的报应就是我

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017