le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Sommario
Elaborazione confusa della richiesta post
parametri della raccolta di array
Richiedi percorso di mappatura
Risultati della risposta unificata
Richiesta: ottieni i dati della richiesta
Risposta: imposta i dati di risposta
Architettura BS Browser/Server, modalità architettura browser/server, il client necessita solo del browser e la logica e i dati dell'applicazione vengono archiviati sul server (Facile da mantenere, esperienza nella media)
Architettura CS Client/Server, modalità architettura client/server (Lo sviluppo e la manutenzione sono problematici, ma l'esperienza è buona)
Ottieni manualmente tramite 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";
- }
- }
Parametri semplici:Il nome del parametro è uguale al nome della variabile del parametro formale, definire parametri formali significa ricevere parametri
- @RestController
- public class RequestController {
- @RequestMapping("/SimpleParam")
- public String SimpleParam(String name,Integer age){
- System.out.println(name+":"+age);
- return "OK";
- }
- }
Tieni presente che gli URL del postino qui sono tuttihttp://localhost:8080/SimpleParam?name=tom&age=10
Entrambe le richieste precedenti sono di ricezione. Quando si tratta di una richiesta di posta, è sufficiente inserire l'URL in Postman.http://localhost:8080/SimpleParam
Se nel post sono presenti caratteri cinesi, sullo sfondo appariranno caratteri confusi, quindi imposta il filtro nella configurazione.
Aggiungi un filtro al contenitore web e specifica il set di caratteri. Nel pacchetto Spring-web viene fornito un filtro di caratteri dedicato
- 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};//如果有多个过滤器,在这里用,隔开
- }
- }
Tieni presente che questo processo è per post. Se get viene passato in cinese, verranno comunque visualizzati caratteri confusi.
Se il nome del parametro del metodo non corrisponde al nome del parametro della richiesta, puoi utilizzare @RequestParam per completare la mappatura.
- @RestController
- public class RequestController {
- @RequestMapping("/SimpleParam")
- public String SimpleParam(@RequestParam(name="name") String username, Integer age){ //引号中写的是请求参数名
- System.out.println(username+":"+age);
- return "OK";
- }
- }
L'attributo obbligatorio in @PequestParam è impostato su true, il che significa che il parametro della richiesta deve essere passato. Se non viene passato, verrà segnalato un errore. Se il parametro è facoltativo (ovvero, può essere passato o meno), the l'attributo obbligatorio può essere impostato su false (in questo modo non verrà segnalato alcun errore se lo passi o meno)
Il nome del parametro di richiesta è lo stesso del nome dell'attributo del parametro formale, basta definire Pojo per riceverlo.
- @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
- }
L'URL qui èhttp://localhost:8080/SimpleParam1?name=cat&age=29
Il nome del parametro di richiesta è uguale al nome dell'attributo del parametro formale., è possibile ricevere parametri di attributi pojo nidificati in base alla relazione gerarchica degli oggetti.
- 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";
- }
- }
Il nome del parametro di richiesta è uguale al nome del gruppo di parametri formali e sono presenti più richieste., definire il parametro formale del tipo array per ricevere i parametri
- @RestController
- public class SimplePojo {
- @RequestMapping("/arrayParam")
- public String ArrayParam(String[] hobby) {//在这里建立一个数组,然后后面的名称和传入参数相同
- System.out.println(Arrays.toString(hobby));
- return "yes";
- }
- }
Il nome del parametro di richiesta è uguale al nome della raccolta di parametri formali e sono presenti più parametri di richiesta.,@RichiediParamRelazione tra parametri vincolanti
- @RestController
- public class SimplePojo {
- @RequestMapping("/listParam")
- public String ArrayParam(@RequestParam List<String> hobby) {
- System.out.println(hobby);
- return "yes";
- }
- }
Utilizza l'annotazione @DateTimeFormat per completare la conversione del formato del parametro della 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:日期时间格式字符串
Ottieni il test:
Il nome della chiave del parametro json è lo stesso del nome dell'attributo dell'oggetto del parametro formale. È possibile ricevere i parametri definendo il parametro formale del tipo Pojo. È necessario utilizzare l'identificatore @RequestBody.
- @RestController
- public class SimplePojo {
- @RequestMapping("/jsonParam")
- public String jsonParam(@RequestBody user user) {
- System.out.println(user);
- return "yes";
- }
- }
- //user这和前面的复杂实体参数一样
Incapsula JSON nella classe dell'entità utente tramite @requestbody
Importa prima le coordinate
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.9.0</version>
- </dependency>
Abilita il supporto per la conversione automatica dei dati 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'}";
- }
Quando si effettua una richiesta Ottieni:
- {
- "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'}";
- }
Quando si effettua una richiesta Ottieni:
- [{"name":"xixi","age":12},
- {"name":"haha","age":21}
- ]
Passare i parametri direttamente tramite l'URL della richiesta Utilizzare {...} per identificare i parametri del percorso È necessario utilizzare @PathVariable per ottenere i parametri del percorso.
un parametro di percorso
- @RestController
- public class SimplePojo {
- @RequestMapping("/path/{id}")
- public String pathParam(@PathVariable Integer id) {
- System.out.println(id);
- return "yes";
- }
- }
L'URL testato dal postino èhttp://localhost:8080/percorso/1
Parametri di percorso multipli
- @RestController
- public class SimplePojo {
- @RequestMapping("/path/{id}/{name}")
- public String pathParam(@PathVariable Integer id ,@PathVariable String name) {
- System.out.println(id+":"+name);
- return "yes";
- }
- }
L'URL testato dal postino èhttp://localhost:8080/percorso/1/cat
Domanda: I percorsi richiesti durante lo sviluppo dovrebbero essere diversi, ma se ci sono gli stessi percorsi verrà segnalato un errore non so quale dovrebbe essere chiamato----------normalmenteImposta il nome del modulo come prefisso per il percorso della richiesta
È l'annotazione del metodo e l'annotazione della classe
Posizionalo sopra la definizione del metodo del controller SpringMVC
Utilizzato per impostare il percorso di richiesta del metodo del controller, se si imposta il metodo del controller corrente sulla classe, richiedere il prefisso del percorso di accesso
- @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'}";
- }
-
- }
Proprietà: valore (predefinito): Richiedi percorso di accesso.Oppure accedere al prefisso del percorso
@RequestParam è un'annotazione di parametro formale, situata davanti alla definizione del parametro del metodo del controller SpringMVC, utilizzata per associare la relazione tra i parametri della richiesta e i parametri del metodo del processore.
Parametri: obbligatorio: se si tratta di un parametro obbligatorio. DefaultValue: il valore predefinito del parametro
Sono annotazioni di metodo e annotazioni di classe
Situato nel metodo/classe del controller
La funzione èRispondere direttamente al valore restituito dal metodo. Se il tipo di valore restituito è un oggetto/raccolta di entità, verrà convertito in una risposta in 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;
- }
- }
Il test è inserito nel postinohttp://localhost:8080/listAddrQuesto è tutto, altri simili
Ogni metodo esposto all'esterno è chiamato interfaccia funzionale (ad esempio, ci sono tre interfacce sopra) e il percorso è il percorso di accesso.
Il problema affrontato è che i risultati delle risposte sono diversi e l’analisi finale dei risultati è più problematica, quindi i risultati delle risposte devono essere unificati.
- 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);
- }
- }