Controller层编码规范

 

 

1、Controller层

controller层在MVC设计中属于控制层;设计初衷:接受请求并响应请求;所以,该层尽量轻薄,避免编写涉及业务处理的代码。

前后端分离的开发设计模式下,推荐使用@RestController注解,它相当于@ResponseBody + @Controller的组合使用。

springBoot中直接用controller就可以

1) 如果只是使用@RestController注解Controller类,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容,默认转成json串。

2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

总之,使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面;若返回json等内容到页面,则需要加@ResponseBody注解

1)设定请求路径

使用注解@PostMapping("/page"),类命名和方法命名之上都可以加。

注意按照不同业务进行划分使用,避免乱写乱用。

2)设置请求方式

    常用的POST/GET。使用注解:@RequestMapping   和  @GetMapping @PostMapping。

    Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping} 来帮助简化常用的HTTP方法的映射 并更好地表达被注解方法的语义 

该注解将HTTP Get 映射到 特定的处理方法上

    @GetMapping是一个组合注解,它是@RequestMapping(method = RequestMethod.GET)的缩写

    @PostMapping是一个组合注解,它是@RequestMapping(method = RequestMethod.POST)的缩写

3)设置请求参数方式

①表单提交,直接使用vo类或具体参数名接收;

@Controller
public class LoginController {

@RequestMapping(value = "login", method = RequestMethod.POST)
public String login(UserVO user){
System.out.println("POJO: " + user.getClass().getName() +
", hash code: " + user.hashCode() + ", " + user.toString());
return "redirect:/";
}

}
②@RequestParam

@RequestParam(value="", required=true, defaultValue="")

@RequestParam 有三个属性:

(1)value:请求参数名(必须配置)

(2)required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)

(3)defaultValue:默认值,如果设置了该值,required 将自动设为 false

@ApiOperation(value = "根据id查询")
@PostMapping("/show")
public Responses show(@RequestParam(value="userId",defaultValue="-1") Long userId) {
Record data = recordService.getOne(vo.getId());
return Responses.success(data);

}
③n提交,使用注解@RequestBody。

 

@RequestBody主要用来接收前端以POST方式传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。

@ApiOperation(value = "根据id查询")
@PostMapping("/get")
public Responses getOne(@Validated @RequestBody IdVO vo){
Record data = recordService.getOne(vo.getId());
return Responses.success(data);
}
④athVariable

@RestController
@RequestMapping("/")
public class ChineseDrugController {
@ResponseBody
@RequestMapping(value = "/{name}")
public String showName(@PathVariable String name, @PathVariable(value = "name", required = false) String sex) {
return "Hello " + name + sex;
}

⑤@PathParam

url:http://127.0.0.1:8080/sexvalue/namevalue?name=唐&sex=男

@RestController
@RequestMapping(value = "/{sex}")
public class ChineseDrugController {
@ResponseBody
@RequestMapping(value = "/{name}")
public String showName(@PathVariable(value = "name") String name, @PathParam(value = "sex") String sex) {
return "Hello " + name + " " + sex;
}
}
说明:以上代码仅仅展示功能上有很好的灵活性,实际开发中避免如此任意使用 。

4)校验请求参数

参数校验

①使用注解@Validated,使得参数自动校验生效,它是spring-contex中的注解;

②vo类中自定义各类校验,比如@NotNull等,他是javax下validation-api中的注解此处不赘述;

③程序层面的校验。

方法示例如下

@ApiOperation(value = "应用类型和应用关系绑定")
@PostMapping("/applicationTypeBind")
public Boolean applicationTypeBind(@Validated @RequestBody ApplicationBindVO vo){
applicationTypeService.applicationTypeBind(vo);
return true;
}
对应VO类示例

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Set;

@Data
@ApiModel(value = "ApplicationBindVO",description = "关系绑定vo")
public class ApplicationBindVO {

@NotNull
@ApiModelProperty("应用类型id")
private Long typeId;

@ApiModelProperty("应用id集合")
private List<Long> applicationIdList;
}
 5)入参出参设计
————————————————
版权声明:本文为CSDN博主「春风化作秋雨」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiahao1186/article/details/90634764

posted @ 2019-11-18 13:59  稳健国国王  阅读(960)  评论(0)    收藏  举报