java - 是否可以将路径变量和请求参数绑定(bind)到一个对象中?

标签 java spring-boot spring-mvc java-8

<分区>

我正在创建一个带有路径变量和请求参数的端点。 如何将路径变量和请求参数合并到一个对象中?我在 java 8 中使用 springboot 2

@RequestMapping(path = "/schedules")
public class SchedulesController {

    @GetMapping("/{area}/{subarea}")
    public MyObject getFlight(@PathVariable("area") String area, @PathVariable("subarea") String subarea,
                           MyModel model) {

        ...
        return new MyObject();
    }
}

@Data
public class MyModel {
    LocalDate datestamp,
    String leadName,
    String viceLeadName
}

我查看了 spring 文档,但似乎找不到如何将 PathVariable 组合到 MyModel 中。

这是我没有对象的 Controller 。

@RequestMapping(path = "/schedules")
public class SchedulesController {

    @GetMapping("/{area}/{subarea}")
    public MyObject getFlight(@PathVariable("area") String area, @PathVariable("subarea") String subarea,
                            @RequestParam(value = "datestamp", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate datestamp,
                            @RequestParam(value = "leadName", required = false) String leadName,
                            @RequestParam(value = "viceLeadName", required = false) String viceLeadName) {

        ...
        return new MyObject();
    }
}

是否可以执行以下操作?路径变量和请求参数在 MyModel 对象中的什么位置?

@RequestMapping(path = "/schedules")
public class SchedulesController {

    @GetMapping("/{area}/{subarea}")
    public MyObject getFlight(MyModel model) {

        ...
        return new MyObject();
    }
}

@Data
public class MyModel {
    String area,
    String subArea,
    LocalDate datestamp,
    String leadName,
    String viceLeadName
}

最佳答案

创建模型 MyModel

  class MyModel {
    String area;
    String subarea;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    LocalDate datestamp;
    String leadname;
    String viceleadname;
    @Override
    public String toString() {
        return "MyModel [area=" + area + ", subarea=" + subarea + ", datestamp=" + datestamp + ", leadname=" + leadname
                + ", viceneadname=" + viceleadname + "]";
    }
    public String getArea() {
        return area;
    }
    public void setArea(String area) {
        this.area = area;
    }
    public String getSubarea() {
        return subarea;
    }
    public void setSubarea(String subarea) {
        this.subarea = subarea;
    }
    public LocalDate getDatestamp() {
        return datestamp;
    }
    public void setDatestamp(LocalDate datestamp) {
        this.datestamp = datestamp;
    }
    public String getLeadname() {
        return leadname;
    }
    public void setLeadname(String leadname) {
        this.leadname = leadname;
    }
    public String getViceneadname() {
        return viceleadname;
    }
    public void setViceneadname(String viceleadname) {
        this.viceleadname = viceleadname;
    }

并且请求映射将与您提到的相同。

  @GetMapping("/{area}/{subarea}")
    public String getFlight(MyModel model) {
      System.out.println(model);

        return "success";
    }

请求看起来像这样:

http://localhost:8080/us/ny?datestamp=2019-05-01&leadname=abc&viceleadname=xyz

关于java - 是否可以将路径变量和请求参数绑定(bind)到一个对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55792555/

相关文章:

java - 使用 Retrofit2 调用 API 时无法接收数据

java - Firebase 身份验证不成功

java - JFrame 中的天气 API 显示

java - 如何映射Pageable的排序字段?

java - 当我为 Hibernate session 工厂创建 bean 时使用 Spring MVC

java - Spring io @Autowired : The blank final field may not have been initialized

Java 包不调整大小

java - 找到了多个名为 [spring_web] 的片段。这对于相对顺序是不合法的

java - 使用二进制响应进行 Spring Boot 2 测试

java - 在 Spring Boot 应用程序中配置 GCP 凭据的首选方法是什么