Κοινή χρήση τεχνολογίας

Ανάπτυξη υποστήριξης ιστού -- απόκριση αιτήματος

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Πίνακας περιεχομένων

Πρόλογος

παρακαλώ

απλές παραμέτρους

πρωτότυπη μέθοδος

Ανοιξιάτικος τρόπος

Ακατάλληλη επεξεργασία του αιτήματος ανάρτησης

Παράμετροι οντοτήτων

Απλές παράμετροι οντοτήτων

Σύνθετες παράμετροι οντοτήτων

Επεξεργασία

παραμέτρους συλλογής συστοιχιών

Παράμετροι πίνακα

Επεξεργασία

Παράμετροι συλλογής

παράμετρος ημερομηνίας

Επεξεργασία

Παράμετροι Json

Επεξεργασία

Περάστε δεδομένα json

συστοιχία json

αντικείμενο json (POJO)

Συλλογή json (POJO)

Ειδοποίηση

παραμέτρους διαδρομής

Αίτημα διαδρομής χαρτογράφησης

@RequestMapping

Αίτημα παραμέτρων

απάντηση

@ResponseBody

Ενοποιημένα αποτελέσματα απόκρισης


Πρόλογος

Αίτημα: Λάβετε δεδομένα αιτήματος

Απόκριση: Ορισμός δεδομένων απόκρισης

Αρχιτεκτονική BS Πρόγραμμα περιήγησης/διακομιστής, λειτουργία αρχιτεκτονικής προγράμματος περιήγησης/διακομιστή, ο πελάτης χρειάζεται μόνο το πρόγραμμα περιήγησης και η λογική και τα δεδομένα της εφαρμογής αποθηκεύονται στον διακομιστή (Εύκολο στη συντήρηση, μέση εμπειρία

Αρχιτεκτονική CS Client/Server, λειτουργία αρχιτεκτονικής πελάτη/διακομιστή (Η ανάπτυξη και η συντήρηση είναι ενοχλητικές, αλλά η εμπειρία είναι καλή

παρακαλώ

απλές παραμέτρους

πρωτότυπη μέθοδος

Λάβετε με μη αυτόματο τρόπο μέσω του HttpServletRequest

  1. import jakarta.servlet.http.HttpServletRequest;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. public class RequestController {
  6. @RequestMapping("/SimpleParam")
  7. public String SimpleParam(HttpServletRequest request){ //返回的字符串类型是String
  8. String name=request.getParameter("name");
  9. String age=request.getParameter("age"); //通过这个方法得到字符串类型的
  10. int age1=Integer.parseInt(age); //将年龄进行类型转换
  11. System.out.println(name+":"+age1); //设置返回格式
  12. return "OK";
  13. }
  14. }

Ανοιξιάτικος τρόπος

Απλές παράμετροι:Το όνομα της παραμέτρου είναι το ίδιο με το επίσημο όνομα της μεταβλητής παραμέτρου, ο καθορισμός τυπικών παραμέτρων σημαίνει λήψη παραμέτρων

  1. @RestController
  2. public class RequestController {
  3. @RequestMapping("/SimpleParam")
  4. public String SimpleParam(String name,Integer age){
  5. System.out.println(name+":"+age);
  6. return "OK";
  7. }
  8. }

Σημειώστε ότι οι διευθύνσεις URL του ταχυδρόμου εδώ είναι όλεςhttp://localhost:8080/SimpleParam?name=tom&age=10

Και τα δύο παραπάνω είναι αιτήματα λήψης Όταν πρόκειται για αίτημα ανάρτησης, χρειάζεται μόνο να εισαγάγετε τη διεύθυνση URL στον ταχυδρόμο.http://localhost:8080/SimpleParam

Ακατάλληλη επεξεργασία του αιτήματος ανάρτησης

Εάν υπάρχουν κινεζικοί χαρακτήρες στην ανάρτηση, θα εμφανιστούν μπερδεμένοι χαρακτήρες στο παρασκήνιο, επομένως ορίστε το φίλτρο στη διαμόρφωση.

Προσθέστε ένα φίλτρο στο κοντέινερ Ιστού και καθορίστε το σύνολο χαρακτήρων Παρέχεται ένα αποκλειστικό φίλτρο χαρακτήρων στο πακέτο Spring-web

  1. public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
  2.    protected Class<?>[] getRootConfigClasses() {
  3.        return new Class[0];
  4.   }
  5.    protected Class<?>[] getServletConfigClasses() {
  6.        return new Class[]{SpringMvcConfig.class};
  7.   }
  8.    protected String[] getServletMappings() {
  9.        return new String[]{"/"};
  10.   }
  11.    //乱码处理
  12.    @Override
  13.    protected Filter[] getServletFilters() {
  14.        CharacterEncodingFilter filter = new CharacterEncodingFilter();
  15.        filter.setEncoding("UTF-8");
  16.        return new Filter[]{filter};//如果有多个过滤器,在这里用,隔开
  17.   }
  18. }

Σημειώστε ότι αυτή η διαδικασία είναι για ανάρτηση.

Εάν το όνομα της παραμέτρου της μεθόδου δεν ταιριάζει με το όνομα παραμέτρου αιτήματος, μπορείτε να χρησιμοποιήσετε το @RequestParam για να ολοκληρώσετε την αντιστοίχιση.

  1. @RestController
  2. public class RequestController {
  3. @RequestMapping("/SimpleParam")
  4. public String SimpleParam(@RequestParam(name="name") String username, Integer age){ //引号中写的是请求参数名
  5. System.out.println(username+":"+age);
  6. return "OK";
  7. }
  8. }

Το απαιτούμενο χαρακτηριστικό στο @PequestParam είναι προεπιλεγμένο σε true, πράγμα που σημαίνει ότι η παράμετρος αιτήματος πρέπει να μεταβιβαστεί, θα αναφερθεί ένα σφάλμα εάν η παράμετρος είναι προαιρετική (δηλαδή, μπορεί να περάσει ή όχι). Το απαιτούμενο χαρακτηριστικό μπορεί να οριστεί σε false (Με αυτόν τον τρόπο, δεν θα αναφέρεται κανένα σφάλμα εάν το περάσετε ή όχι)

Παράμετροι οντοτήτων

Απλές παράμετροι οντοτήτων

Το όνομα παραμέτρου αιτήματος είναι το ίδιο με το επίσημο όνομα χαρακτηριστικού παραμέτρου, απλώς ορίστε το Pojo για να το λάβετε.

  1. @RestController
  2. public class SimplePojo {
  3. @RequestMapping("/SimpleParam1")
  4. public String SimplePojo(user user) {
  5. System.out.println(user);
  6. return "yes";
  7. }
  8. }
  1. public class user {
  2. private String name;
  3. private Integer age;
  4. //加getter和setter方法toString
  5. }

Το url εδώ είναιhttp://localhost:8080/SimpleParam1?name=cat&age=29

Σύνθετες παράμετροι οντοτήτων

Το όνομα της παραμέτρου αιτήματος είναι το ίδιο με το επίσημο όνομα του χαρακτηριστικού παραμέτρου., μπορείτε να λάβετε ένθετες παραμέτρους χαρακτηριστικών pojo σύμφωνα με τη σχέση ιεραρχίας αντικειμένων.

  1. public class user {
  2. private String name;
  3. private Integer age;
  4. private Address address;
  5. //加getter和setter和toString
  6. }
  1. public class Address {
  2. private String province;
  3. private String city;
  4. //加getter和setter还有toString
  5. }
  1. @RestController
  2. public class SimplePojo {
  3. @RequestMapping("/ComplexParam1")
  4. public String ComplexParam(user user) {
  5. System.out.println(user);
  6. return "yes";
  7. }
  8. }

παραμέτρους συλλογής συστοιχιών

Παράμετροι πίνακα

Το όνομα της παραμέτρου αιτήματος είναι το ίδιο με το επίσημο όνομα της ομάδας παραμέτρων και υπάρχουν πολλαπλά αιτήματα., ορίστε την τυπική παράμετρο τύπου πίνακα για τη λήψη παραμέτρων

  1. @RestController
  2. public class SimplePojo {
  3. @RequestMapping("/arrayParam")
  4. public String ArrayParam(String[] hobby) {//在这里建立一个数组,然后后面的名称和传入参数相同
  5. System.out.println(Arrays.toString(hobby));
  6. return "yes";
  7. }
  8. }

Παράμετροι συλλογής

Το όνομα παραμέτρου αιτήματος είναι το ίδιο με το επίσημο όνομα συλλογής παραμέτρων και υπάρχουν πολλές παράμετροι αιτήματος.@RequestParamΣχέση παραμέτρων δέσμευσης

  1. @RestController
  2. public class SimplePojo {
  3. @RequestMapping("/listParam")
  4. public String ArrayParam(@RequestParam List<String> hobby) {
  5. System.out.println(hobby);
  6. return "yes";
  7. }
  8. }

παράμετρος ημερομηνίας

Χρησιμοποιήστε τον σχολιασμό @DateTimeFormat για να ολοκληρώσετε τη μετατροπή της μορφής παραμέτρου ημερομηνίας

  1. @RestController
  2. public class SimplePojo {
  3. @RequestMapping("/dateParam")
  4. public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime) {
  5. System.out.println(updateTime);
  6. return "yes";
  7. }
  8. }

  1. //日期参数    
  2. //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd   @RequestMapping("/dataParam")    
  3. @ResponseBody    
  4. public String dataParam(Date date,@DateTimeFormat(pattern="yyyy-MM-dd") Date date1, @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){        
  5. System.out.println("参数传递 date ==> "+date);        
  6. System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);        
  7. System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);        
  8. return "{'module':'data param'}";   }
  9. }
  10. //@DateTimeFormat是形参注解,用在SpringMVC控制器方法形参前面,用于设定日期时间型数据格式//属性:pattern:日期时间格式字符串

Κάντε τεστ:

http://localhost:8080/springmvc_04_request_param/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08

Παράμετροι Json

Το όνομα κλειδιού παραμέτρου json είναι το ίδιο με το όνομα του τυπικού αντικειμένου παραμέτρου. Μπορείτε να λάβετε παραμέτρους ορίζοντας την επίσημη παράμετρο τύπου Pojo.

  1. @RestController
  2. public class SimplePojo {
  3. @RequestMapping("/jsonParam")
  4. public String jsonParam(@RequestBody user user) {
  5. System.out.println(user);
  6. return "yes";
  7. }
  8. }
  9. //user这和前面的复杂实体参数一样

Ενσωματώστε το json στην κλάση οντοτήτων χρήστη μέσω του @requestbody

Περάστε δεδομένα json

Εισαγάγετε πρώτα τις συντεταγμένες

  1. <dependency>
  2.  <groupId>com.fasterxml.jackson.core</groupId>
  3.  <artifactId>jackson-databind</artifactId>
  4.  <version>2.9.0</version>
  5. </dependency>

Ενεργοποιήστε την υποστήριξη για αυτόματη μετατροπή δεδομένων Json

  1. @Configuration
  2. @ComponentScan("com.itheima.controller")
  3. //开启json数据类型自动转换
  4. @EnableWebMvc
  5. public class SpringMvcConfig {
  6. }
συστοιχία json
   
  1. //集合参数:json格式
  2.    //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
  3.    //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
  4. //它用来将请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
  5.    @RequestMapping("/listParamForJson")
  6.    @ResponseBody
  7.    public String listParamForJson(@RequestBody List<String> likes){
  8.        System.out.println("list common(json)参数传递 list ==> "+likes);
  9.        return "{'module':'list common for json param'}";
  10.   }
αντικείμενο json (POJO)
  1. //POJO参数:json格式
  2. //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
  3. //2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
  4. @RequestMapping("/pojoParamForJson")
  5. @ResponseBody
  6. public String pojoParamForJson(@RequestBody User user){
  7.    System.out.println("pojo(json)参数传递 user ==> "+user);
  8.    return "{'module':'pojo for json param'}";
  9. }

Όταν κάνετε ένα αίτημα λήψης:

  1. {
  2.    "name":"xixi",
  3.    "age":21,
  4.    "address":{
  5.        "provice":"taiyuan",
  6.        "city":"taiyuan"
  7.   }
  8. }
Συλλογή json (POJO)
  1. //集合参数:json格式
  2. //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
  3. //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应
  4. @RequestMapping("/listPojoParamForJson")
  5. @ResponseBody
  6. public String listPojoParamForJson(@RequestBody List<User> list){
  7.    System.out.println("list pojo(json)参数传递 list ==> "+list);
  8.    return "{'module':'list pojo for json param'}";
  9. }

Όταν κάνετε ένα αίτημα λήψης:

  1. [{"name":"xixi","age":12},
  2. {"name":"haha","age":21}
  3. ]
Ειδοποίηση

παραμέτρους διαδρομής

Περάστε τις παραμέτρους απευθείας μέσω της διεύθυνσης url του αιτήματος Χρησιμοποιήστε το {...} για να προσδιορίσετε τις παραμέτρους της διαδρομής.

μια παράμετρος διαδρομής

  1. @RestController
  2. public class SimplePojo {
  3. @RequestMapping("/path/{id}")
  4. public String pathParam(@PathVariable Integer id) {
  5. System.out.println(id);
  6. return "yes";
  7. }
  8. }

Το url που δοκιμάστηκε από τον ταχυδρόμο είναιhttp://localhost:8080/path/1

Πολλαπλές παράμετροι διαδρομής

  1. @RestController
  2. public class SimplePojo {
  3. @RequestMapping("/path/{id}/{name}")
  4. public String pathParam(@PathVariable Integer id ,@PathVariable String name) {
  5. System.out.println(id+":"+name);
  6. return "yes";
  7. }
  8. }

Το url που δοκιμάστηκε από τον ταχυδρόμο είναιhttp://localhost:8080/path/1/cat

Αίτημα διαδρομής χαρτογράφησης

Ερώτηση: Οι διαδρομές που ζητούνται κατά την ανάπτυξη θα πρέπει να είναι διαφορετικές, αλλά εάν υπάρχουν οι ίδιες διαδρομές, δεν ξέρω ποια διαδρομή πρέπει να καλείται----------συνήθωςΟρίστε το όνομα της μονάδας ως πρόθεμα στη διαδρομή αιτήματος

@RequestMapping

Είναι σχολιασμός μεθόδου και σχολιασμός κλάσης

Τοποθετήστε το πάνω από τον ορισμό της μεθόδου ελεγκτή SpringMVC

Χρησιμοποιείται για τον ορισμό της διαδρομής αίτησης μεθόδου ελεγκτή, εάν ορίσετε την τρέχουσα μέθοδο ελεγκτή στην κλάση, ζητήστε το πρόθεμα διαδρομής πρόσβασης

  1. @Controller
  2. //设置模块名作为请求路径的前缀
  3. @RequestMapping("/user")
  4. public class UserController {
  5.    //请求路径映射
  6.    @RequestMapping("/save")
  7.    @ResponseBody
  8.    public String save(){
  9.        System.out.println("user save ...");
  10.        return "{'module':'user save'}";
  11.   }
  12.    //请求路径映射
  13.    @RequestMapping("/delete")
  14.    @ResponseBody
  15.    public String delete(){
  16.        System.out.println("user delete ...");
  17.        return "{'module':'user delete'}";
  18.   }
  19. }

Ιδιότητες: τιμή (προεπιλογή): Αίτημα διαδρομής πρόσβασης.Ή πρόθεμα διαδρομής πρόσβασης

Αίτημα παραμέτρων

Το @RequestParam είναι ένας επίσημος σχολιασμός παραμέτρων, που βρίσκεται μπροστά από τον ορισμό παραμέτρων της μεθόδου ελεγκτή SpringMVC, που χρησιμοποιείται για τη δέσμευση της σχέσης μεταξύ των παραμέτρων αιτήματος και των παραμέτρων της μεθόδου επεξεργαστή.

Παράμετροι: απαιτείται: εάν είναι απαιτούμενη παράμετρος DefaultValue: η προεπιλεγμένη τιμή της παραμέτρου

απάντηση

@ResponseBody

Είναι σχολιασμοί μεθόδων και σχολιασμοί κλάσεων

Βρίσκεται στη μέθοδο/κλάση ελεγκτή

Η συνάρτηση είναιΑπάντηση απευθείας στην τιμή επιστροφής της μεθόδου Εάν ο τύπος τιμής επιστροφής είναι αντικείμενο/συλλογή οντότητας, θα μετατραπεί σε απόκριση μορφής JSON.

@RestController=@Controller+@ResponseBody

  1. @RestController
  2. public class ResponseController {
  3. @RequestMapping("/hello")
  4. public String hello(){
  5. System.out.println("hello world");
  6. return "hello world~";
  7. }
  8. @RequestMapping("/getAddr")
  9. public Address getAddr(){
  10. Address addr=new Address();
  11. addr.setProvince("山西");
  12. addr.setCity("太原");
  13. return addr;
  14. }
  15. @RequestMapping("/listAddr")
  16. public List<Address> ListAddr(){
  17. List<Address> list=new ArrayList<>();
  18. Address addr=new Address();
  19. addr.setProvince("山西");
  20. addr.setCity("太原");
  21. Address addr2=new Address();
  22. addr2.setProvince("山");
  23. addr2.setCity("太");
  24. list.add(addr);
  25. list.add(addr2);
  26. return list;
  27. }
  28. }

Το τεστ εισάγεται στον ταχυδρόμοhttp://localhost:8080/listAddrΑυτό είναι, άλλα παρόμοια

Κάθε μέθοδος που εκτίθεται προς τα έξω ονομάζεται λειτουργική διεπαφή (για παράδειγμα, υπάρχουν τρεις διεπαφές παραπάνω) και η διαδρομή είναι η διαδρομή πρόσβασής τους.

Το πρόβλημα που αντιμετωπίζουν είναι ότι τα αποτελέσματα απόκρισής τους είναι διαφορετικά και η τελική ανάλυση των αποτελεσμάτων είναι πιο ενοχλητική, επομένως τα αποτελέσματα απόκρισης πρέπει να ενοποιηθούν.

Ενοποιημένα αποτελέσματα απόκρισης

  1. public class Result {
  2. private Integer code;
  3. private String msg;
  4. private Object data;
  5. public Result(){
  6. }
  7. public Result(Integer code,String msg,Object data){
  8. this.code=code;
  9. this.msg=msg;
  10. this.data=data;
  11. }
  12. public Integer getCode() {
  13. return code;
  14. }
  15. public void setCode(Integer code) {
  16. this.code = code;
  17. }
  18. public String getMsg() {
  19. return msg;
  20. }
  21. public void setMsg(String msg) {
  22. this.msg = msg;
  23. }
  24. public Object getData() {
  25. return data;
  26. }
  27. public void setData(Object data) {
  28. this.data = data;
  29. }
  30. public static Result success(Object data){
  31. return new Result(1,"success",data);
  32. }
  33. public static Result success(){
  34. return new Result(1,"success",null);
  35. }
  36. public static Result error(String msg){
  37. return new Result(0,msg,null);
  38. }
  39. @Override
  40. public String toString() {
  41. return "Result{" +
  42. "code=" + code +
  43. ", msg='" + msg + ''' +
  44. ", data=" + data +
  45. '}';
  46. }
  47. }
  1. @RestController
  2. public class ResponseController {
  3. @RequestMapping("/hello")
  4. public Result hello(){
  5. System.out.println("hello world");
  6. //return new Result(1,"success","hello world");
  7. return Result.success("hello world~");//需要给前端传送数据
  8. }
  9. @RequestMapping("/getAddr")
  10. public Result getAddr(){
  11. Address addr=new Address();
  12. addr.setProvince("山西");
  13. addr.setCity("太原");
  14. return Result.success(addr);
  15. }
  16. @RequestMapping("/listAddr")
  17. public Result ListAddr(){
  18. List<Address> list=new ArrayList<>();
  19. Address addr=new Address();
  20. addr.setProvince("山西");
  21. addr.setCity("太原");
  22. Address addr2=new Address();
  23. addr2.setProvince("山");
  24. addr2.setCity("太");
  25. list.add(addr);
  26. list.add(addr2);
  27. return Result.success(list);
  28. }
  29. }