Teknologian jakaminen

Web-taustajärjestelmän kehitys – pyydä vastausta

2024-07-12

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

Sisällysluettelo

Esipuhe

kysyä

yksinkertaiset parametrit

alkuperäinen menetelmä

Kevät tapa

Lähetyspyynnön käsittely on virheellinen

Entiteettiparametrit

Yksinkertaiset kokonaisuuden parametrit

Monimutkaiset kokonaisuuden parametrit

Muokata

taulukon kokoelmaparametreja

Taulukon parametrit

Muokata

Kokoelman parametrit

päivämäärä parametri

Muokata

Json-parametrit

Muokata

Välitä json-tiedot

json-joukko

json-objekti (POJO)

json-kokoelma (POJO)

Ilmoitus

polun parametrit

Pyydä kartoituspolkua

@RequestMapping

Pyydä parametreja

vastaus

@ResponseBody

Yhtenäiset vastaustulokset


Esipuhe

Pyyntö: Hanki pyyntötiedot

Vastaus: Aseta vastaustiedot

BS-arkkitehtuuri Selain/palvelin, selain/palvelinarkkitehtuuritila, asiakas tarvitsee vain selaimen ja sovelluslogiikka ja tiedot tallennetaan palvelimelle (Helppo huoltaa, keskimääräinen kokemus

CS-arkkitehtuuri Asiakas/palvelin, asiakas/palvelin arkkitehtuuritila (Kehittäminen ja ylläpito on hankalaa, mutta kokemus on hyvä

kysyä

yksinkertaiset parametrit

alkuperäinen menetelmä

Hanki manuaalisesti HttpServletRequestin kautta

  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. }

Kevät tapa

Yksinkertaiset parametrit:Parametrin nimi on sama kuin muodollisen parametrin muuttujan nimimuodollisten parametrien määrittäminen tarkoittaa parametrien vastaanottamista

  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. }

Huomaa, että tässä ovat kaikki postimiehen URL-osoitteethttp://localhost:8080/SimpleParam?name=tom&age=10

Molemmat edellä mainitut ovat hakupyyntöjä.http://localhost:8080/SimpleParam

Lähetyspyynnön käsittely on virheellinen

Jos viestissä on kiinalaisia ​​merkkejä, taustalla näkyy sotkuisia merkkejä, joten aseta suodatin määrityksiin.

Lisää suodatin verkkosäiliöön ja määritä merkistö Spring-web-paketissa

  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. }

Huomaa, että tämä prosessi on tarkoitettu postitse, jos get hyväksytään kiinaksi, sotkettuja merkkejä näkyy silti.

Jos menetelmäparametrin nimi ei vastaa pyyntöparametrin nimeä, voit suorittaa yhdistämisen loppuun käyttämällä @RequestParamia.

  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. }

Pakollinen attribuutti @PequestParamissa on oletuksena tosi, mikä tarkoittaa, että pyyntöparametri on välitettävä, jos parametri on valinnainen (eli se voidaan välittää tai ei). pakollinen attribuutti voidaan asettaa arvoon false (Tällä tavalla virhettä ei ilmoiteta, jos hyväksyt sen vai et)

Entiteettiparametrit

Yksinkertaiset kokonaisuuden parametrit

Pyyntöparametrin nimi on sama kuin muodollinen parametrin attribuutin nimi, määritä vain Pojo vastaanottamaan se.

  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-osoite on tässähttp://localhost:8080/SimpleParam1?name=cat&age=29

Monimutkaiset kokonaisuuden parametrit

Pyyntöparametrin nimi on sama kuin muodollinen parametrin attribuutin nimi., voit vastaanottaa sisäkkäisiä pojo-attribuuttiparametreja objektihierarkiasuhteen mukaan.

  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. }

taulukon kokoelmaparametreja

Taulukon parametrit

Pyyntöparametrin nimi on sama kuin muodollinen parametriryhmän nimi, ja pyyntöjä on useita., määritä taulukkotyypin muodollinen parametri parametrien vastaanottamista varten

  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. }

Kokoelman parametrit

Pyyntöparametrin nimi on sama kuin muodollinen parametrikokoelman nimi, ja pyyntöparametreja on useita.@RequestParamSidontaparametrisuhde

  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. }

päivämäärä parametri

Viimeistele päivämääräparametrimuodon muunnos @DateTimeFormat-merkinnällä

  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:日期时间格式字符串

Hanki testi:

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

Json-parametrit

json-parametrin avaimen nimi on sama kuin muodollisen parametrin attribuutin nimi. Voit vastaanottaa parametreja määrittämällä Pojo-tyypin muodollisen parametrin. Sinun on käytettävä @RequestBody-tunnistetta.

  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这和前面的复杂实体参数一样

Kapseloi json käyttäjäentiteettiluokkaan @requestbody kautta

Välitä json-tiedot

Tuo ensin koordinaatit

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

Ota käyttöön Json-tietojen automaattisen muuntamisen tuki

  1. @Configuration
  2. @ComponentScan("com.itheima.controller")
  3. //开启json数据类型自动转换
  4. @EnableWebMvc
  5. public class SpringMvcConfig {
  6. }
json-joukko
   
  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-objekti (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. }

Kun teet Hanki-pyynnön:

  1. {
  2.    "name":"xixi",
  3.    "age":21,
  4.    "address":{
  5.        "provice":"taiyuan",
  6.        "city":"taiyuan"
  7.   }
  8. }
json-kokoelma (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. }

Kun teet Hanki-pyynnön:

  1. [{"name":"xixi","age":12},
  2. {"name":"haha","age":21}
  3. ]
Ilmoitus

polun parametrit

Ohjaa parametrit suoraan pyynnön URL-osoitteen kautta. Tunnista polkuparametrit käyttämällä @PathVariable-komentoa.

polkuparametri

  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. }

Postimiehen testaama url onhttp://localhost:8080/path/1

Useita polkuparametreja

  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. }

Postimiehen testaama url onhttp://localhost:8080/path/1/cat

Pyydä kartoituspolkua

Kysymys: Kehityksen aikana pyydettyjen polkujen tulisi olla erilaisia, mutta jos polut ovat samat, en tiedä, kumpi niistä pitäisi kutsua - yleensäAseta moduulin nimi pyyntöpolun etuliitteeksi

@RequestMapping

Se on menetelmämerkintä ja luokkamerkintä

Aseta se SpringMVC-ohjainmenetelmämäärityksen yläpuolelle

Käytetään ohjainmenetelmän pyyntöpolun asettamiseen, jos asetat luokassa nykyisen ohjainmenetelmän, pyydä pääsypolun etuliite

  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. }

Ominaisuudet: arvo (oletus): Pyydä pääsypolkua.Tai pääsypolun etuliite

Pyydä parametreja

@RequestParam on muodollinen parametrimerkintä, joka sijaitsee SpringMVC-ohjaimen menetelmäparametrimäärityksen edessä ja jota käytetään sitomaan pyyntöparametrien ja prosessorin menetelmäparametrien välinen suhde.

Parametrit: pakollinen: onko se pakollinen parametri DefaultValue: parametrin oletusarvo

vastaus

@ResponseBody

Ovat menetelmämerkinnät ja luokkamerkinnät

Sijaitsee ohjaimen menetelmässä/luokassa

Toiminto onVastaa suoraan menetelmän palautusarvoon. Jos palautusarvon tyyppi on entiteettiobjekti/kokoelma, se muunnetaan JSON-muodon vastaukseksi.

@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. }

Testi syötetään postinkiinnitykseenhttp://localhost:8080/listAddrSiinä se, muita vastaavia

Jokaista ulkopuolelle altistavaa menetelmää kutsutaan toiminnalliseksi rajapinnaksi (yläpuolella on esimerkiksi kolme rajapintaa), ja polku on niiden pääsypolku.

Ongelmana on, että niiden vastaustulokset ovat erilaisia ​​ja tulosten lopullinen analyysi on hankalampaa, joten vastaustulokset on yhtenäistettävä.

Yhtenäiset vastaustulokset

  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. }