minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Índice
Processamento distorcido da solicitação pós-solicitação
Parâmetros de entidade simples
Parâmetros de entidade complexos
parâmetros de coleção de array
Solicitar caminho de mapeamento
Resultados de resposta unificada
Solicitação: obtenha dados da solicitação
Resposta: Definir dados de resposta
Arquitetura BS Navegador/Servidor, modo de arquitetura navegador/servidor, o cliente só precisa do navegador, e a lógica e os dados do aplicativo são armazenados no servidor (Fácil de manter, experiência média)
Arquitetura CS Cliente/Servidor, modo de arquitetura cliente/servidor (O desenvolvimento e a manutenção são problemáticos, mas a experiência é boa)
Obtenha manualmente através de HttpServletRequest
- import jakarta.servlet.http.HttpServletRequest;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- public class RequestController {
- @RequestMapping("/SimpleParam")
- public String SimpleParam(HttpServletRequest request){ //返回的字符串类型是String
- String name=request.getParameter("name");
- String age=request.getParameter("age"); //通过这个方法得到字符串类型的
- int age1=Integer.parseInt(age); //将年龄进行类型转换
- System.out.println(name+":"+age1); //设置返回格式
- return "OK";
- }
- }
Parâmetros simples:O nome do parâmetro é igual ao nome formal da variável do parâmetro, definir parâmetros formais significa receber parâmetros
- @RestController
- public class RequestController {
- @RequestMapping("/SimpleParam")
- public String SimpleParam(String name,Integer age){
- System.out.println(name+":"+age);
- return "OK";
- }
- }
Observe que os URLs do carteiro aqui são todoshttp://localhost:8080/SimpleParam?name=tom&age=10
Ambos os itens acima são solicitações get. Quando for uma solicitação de postagem, você só precisa inserir a URL no carteiro.http://localhost:8080/SimpleParam
Se houver caracteres chineses na postagem, caracteres distorcidos aparecerão no fundo, então defina o filtro na configuração.
Adicione um filtro ao contêiner da web e especifique o conjunto de caracteres. Um filtro de caracteres dedicado é fornecido no pacote Spring-web.
- public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
- protected Class<?>[] getRootConfigClasses() {
- return new Class[0];
- }
-
- protected Class<?>[] getServletConfigClasses() {
- return new Class[]{SpringMvcConfig.class};
- }
-
- protected String[] getServletMappings() {
- return new String[]{"/"};
- }
- //乱码处理
- @Override
- protected Filter[] getServletFilters() {
- CharacterEncodingFilter filter = new CharacterEncodingFilter();
- filter.setEncoding("UTF-8");
- return new Filter[]{filter};//如果有多个过滤器,在这里用,隔开
- }
- }
Observe que este processo é para postagem. Se get for passado em chinês, caracteres ilegíveis ainda aparecerão.
Se o nome do parâmetro do método não corresponder ao nome do parâmetro da solicitação, você poderá usar @RequestParam para concluir o mapeamento.
- @RestController
- public class RequestController {
- @RequestMapping("/SimpleParam")
- public String SimpleParam(@RequestParam(name="name") String username, Integer age){ //引号中写的是请求参数名
- System.out.println(username+":"+age);
- return "OK";
- }
- }
O atributo obrigatório em @PequestParam é padronizado como verdadeiro, o que significa que o parâmetro de solicitação deve ser passado. Se não for passado, será relatado um erro. Se o parâmetro for opcional (ou seja, pode ser passado ou não). o atributo obrigatório pode ser definido como falso (desta forma, nenhum erro será relatado se você passar ou não)
O nome do parâmetro da solicitação é igual ao nome do atributo do parâmetro formal, basta definir o Pojo para recebê-lo.
- @RestController
- public class SimplePojo {
- @RequestMapping("/SimpleParam1")
- public String SimplePojo(user user) {
- System.out.println(user);
- return "yes";
- }
- }
- public class user {
- private String name;
- private Integer age;
- //加getter和setter方法toString
- }
A URL aqui éhttp://localhost:8080/SimpleParam1?name=cat&age=29
O nome do parâmetro de solicitação é igual ao nome do atributo do parâmetro formal., você pode receber parâmetros de atributos pojo aninhados de acordo com o relacionamento de hierarquia de objetos.
- public class user {
- private String name;
- private Integer age;
- private Address address;
- //加getter和setter和toString
- }
- public class Address {
- private String province;
- private String city;
- //加getter和setter还有toString
- }
- @RestController
- public class SimplePojo {
- @RequestMapping("/ComplexParam1")
- public String ComplexParam(user user) {
- System.out.println(user);
- return "yes";
- }
- }
O nome do parâmetro de solicitação é igual ao nome formal do grupo de parâmetros e há diversas solicitações., defina o parâmetro formal do tipo array para receber parâmetros
- @RestController
- public class SimplePojo {
- @RequestMapping("/arrayParam")
- public String ArrayParam(String[] hobby) {//在这里建立一个数组,然后后面的名称和传入参数相同
- System.out.println(Arrays.toString(hobby));
- return "yes";
- }
- }
O nome do parâmetro de solicitação é igual ao nome formal da coleção de parâmetros e há vários parâmetros de solicitação.,@RequestParamRelacionamento de parâmetro de associação
- @RestController
- public class SimplePojo {
- @RequestMapping("/listParam")
- public String ArrayParam(@RequestParam List<String> hobby) {
- System.out.println(hobby);
- return "yes";
- }
- }
Use a anotação @DateTimeFormat para concluir a conversão do formato do parâmetro de data
- @RestController
- public class SimplePojo {
- @RequestMapping("/dateParam")
- public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime) {
- System.out.println(updateTime);
- return "yes";
- }
- }
- //日期参数
- //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd @RequestMapping("/dataParam")
- @ResponseBody
- public String dataParam(Date date,@DateTimeFormat(pattern="yyyy-MM-dd") Date date1, @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
- System.out.println("参数传递 date ==> "+date);
- System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
- System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
- return "{'module':'data param'}"; }
- }
- //@DateTimeFormat是形参注解,用在SpringMVC控制器方法形参前面,用于设定日期时间型数据格式//属性:pattern:日期时间格式字符串
Faça o teste:
O nome da chave do parâmetro json é igual ao nome do atributo do objeto do parâmetro formal. Você pode receber parâmetros definindo o parâmetro formal do tipo Pojo.
- @RestController
- public class SimplePojo {
- @RequestMapping("/jsonParam")
- public String jsonParam(@RequestBody user user) {
- System.out.println(user);
- return "yes";
- }
- }
- //user这和前面的复杂实体参数一样
Encapsular json na classe de entidade do usuário por meio de @requestbody
Importe as coordenadas primeiro
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.9.0</version>
- </dependency>
Habilite o suporte para conversão automática de dados Json
- @Configuration
- @ComponentScan("com.itheima.controller")
- //开启json数据类型自动转换
- @EnableWebMvc
- public class SpringMvcConfig {
- }
- //集合参数:json格式
- //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
- //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
- //它用来将请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
- @RequestMapping("/listParamForJson")
- @ResponseBody
- public String listParamForJson(@RequestBody List<String> likes){
- System.out.println("list common(json)参数传递 list ==> "+likes);
- return "{'module':'list common for json param'}";
- }
- //POJO参数:json格式
- //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
- //2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
- @RequestMapping("/pojoParamForJson")
- @ResponseBody
- public String pojoParamForJson(@RequestBody User user){
- System.out.println("pojo(json)参数传递 user ==> "+user);
- return "{'module':'pojo for json param'}";
- }
Ao fazer uma solicitação Get:
- {
- "name":"xixi",
- "age":21,
- "address":{
- "provice":"taiyuan",
- "city":"taiyuan"
- }
- }
- //集合参数:json格式
- //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
- //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应
- @RequestMapping("/listPojoParamForJson")
- @ResponseBody
- public String listPojoParamForJson(@RequestBody List<User> list){
- System.out.println("list pojo(json)参数传递 list ==> "+list);
- return "{'module':'list pojo for json param'}";
- }
Ao fazer uma solicitação Get:
- [{"name":"xixi","age":12},
- {"name":"haha","age":21}
- ]
Passe parâmetros diretamente através do URL da solicitação Use {...} para identificar os parâmetros do caminho. Você precisa usar @PathVariable para obter os parâmetros do caminho.
um parâmetro de caminho
- @RestController
- public class SimplePojo {
- @RequestMapping("/path/{id}")
- public String pathParam(@PathVariable Integer id) {
- System.out.println(id);
- return "yes";
- }
- }
O URL testado pelo carteiro éhttp://localhost:8080/caminho/1
Vários parâmetros de caminho
- @RestController
- public class SimplePojo {
- @RequestMapping("/path/{id}/{name}")
- public String pathParam(@PathVariable Integer id ,@PathVariable String name) {
- System.out.println(id+":"+name);
- return "yes";
- }
- }
O URL testado pelo carteiro éhttp://localhost:8080/caminho/1/cat
Pergunta: Os caminhos solicitados durante o desenvolvimento devem ser diferentes, mas se houver os mesmos caminhos, será relatado um erro não sei qual deles deve ser chamado----------geralmente através.Defina o nome do módulo como um prefixo para o caminho da solicitação
É anotação de método e anotação de classe
Coloque-o acima da definição do método do controlador SpringMVC
Usado para definir o caminho de solicitação do método do controlador, se estiver configurando o método do controlador atual na classe, solicite o prefixo do caminho de acesso
- @Controller
- //设置模块名作为请求路径的前缀
- @RequestMapping("/user")
- public class UserController {
- //请求路径映射
- @RequestMapping("/save")
- @ResponseBody
- public String save(){
- System.out.println("user save ...");
- return "{'module':'user save'}";
- }
- //请求路径映射
- @RequestMapping("/delete")
- @ResponseBody
- public String delete(){
- System.out.println("user delete ...");
- return "{'module':'user delete'}";
- }
-
- }
Propriedades: valor (padrão): Caminho de acesso da solicitação.Ou prefixo do caminho de acesso
@RequestParam é uma anotação de parâmetro formal, localizada na frente da definição de parâmetro do método do controlador SpringMVC, usada para vincular o relacionamento entre os parâmetros de solicitação e os parâmetros do método do processador.
Parâmetros: obrigatório: se é um parâmetro obrigatório DefaultValue: o valor padrão do parâmetro
São anotações de método e anotações de classe
Localizado no método/classe do controlador
A função éResponder diretamente ao valor de retorno do método. Se o tipo de valor de retorno for um objeto/coleção de entidade, ele será convertido em uma resposta no formato JSON.
@RestController=@Controller+@ResponseBody
- @RestController
- public class ResponseController {
- @RequestMapping("/hello")
- public String hello(){
- System.out.println("hello world");
- return "hello world~";
- }
- @RequestMapping("/getAddr")
- public Address getAddr(){
- Address addr=new Address();
- addr.setProvince("山西");
- addr.setCity("太原");
- return addr;
- }
- @RequestMapping("/listAddr")
- public List<Address> ListAddr(){
- List<Address> list=new ArrayList<>();
- Address addr=new Address();
- addr.setProvince("山西");
- addr.setCity("太原");
- Address addr2=new Address();
- addr2.setProvince("山");
- addr2.setCity("太");
- list.add(addr);
- list.add(addr2);
- return list;
- }
- }
O teste é inserido no carteirohttp://localhost:8080/listaEnd.É isso, outros semelhantes
Cada método exposto externamente é chamado de interface funcional (por exemplo, existem três interfaces acima), e o caminho é o caminho de acesso.
O problema enfrentado é que os resultados das respostas são diferentes e a análise final dos resultados é mais problemática, por isso os resultados das respostas precisam ser unificados.
- public class Result {
- private Integer code;
- private String msg;
- private Object data;
- public Result(){
-
- }
- public Result(Integer code,String msg,Object data){
- this.code=code;
- this.msg=msg;
- this.data=data;
-
- }
- public Integer getCode() {
- return code;
- }
-
- public void setCode(Integer code) {
- this.code = code;
- }
-
- public String getMsg() {
- return msg;
- }
-
- public void setMsg(String msg) {
- this.msg = msg;
- }
-
- public Object getData() {
- return data;
- }
-
- public void setData(Object data) {
- this.data = data;
- }
- public static Result success(Object data){
- return new Result(1,"success",data);
- }
- public static Result success(){
- return new Result(1,"success",null);
- }
- public static Result error(String msg){
- return new Result(0,msg,null);
- }
- @Override
- public String toString() {
- return "Result{" +
- "code=" + code +
- ", msg='" + msg + ''' +
- ", data=" + data +
- '}';
- }
- }
- @RestController
- public class ResponseController {
- @RequestMapping("/hello")
- public Result hello(){
- System.out.println("hello world");
- //return new Result(1,"success","hello world");
- return Result.success("hello world~");//需要给前端传送数据
- }
- @RequestMapping("/getAddr")
- public Result getAddr(){
- Address addr=new Address();
- addr.setProvince("山西");
- addr.setCity("太原");
- return Result.success(addr);
- }
- @RequestMapping("/listAddr")
- public Result ListAddr(){
- List<Address> list=new ArrayList<>();
- Address addr=new Address();
- addr.setProvince("山西");
- addr.setCity("太原");
- Address addr2=new Address();
- addr2.setProvince("山");
- addr2.setCity("太");
- list.add(addr);
- list.add(addr2);
- return Result.success(list);
- }
- }