[英]Spring MVC Rest - multiple parameters at URL
我有“運輸經理”應用程序。 它是一個簡單的應用程序,用於測試如何使用Spring框架。 我已經創建了用於向數據庫(Spring Data)添加新傳輸的終結點,並且工作正常。 我添加了一些公交,現在我想獲取每日報告,在這里我遇到了問題。 這是端點的外觀:
GET http://example.com/reports/daily?start_date=YYYY-MM-DD&end_date=YYYY-MM_DD
和響應(JSON)例如:
{
"total_distance": "90",
"total_price": "115"
}
我該怎么辦? 我應該在模型類中添加新字段“ startDate”和“ endDate”嗎?
這是我的模型類的外觀:
@Entity
public class Transit {
public Transit() {
}
@Column(name = "id")
@Id
@GeneratedValue
private Long id;
@NotEmpty
private String sourceAddress;
@NotEmpty
private String destinationAddress;
private double price;
private DateTime date;
private Long distance;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getSourceAddress() {
return sourceAddress;
}
public void setSourceAddress(String sourceAddress) {
this.sourceAddress = sourceAddress;
}
public String getDestinationAddress() {
return destinationAddress;
}
public void setDestinationAddress(String destinationAddress) {
this.destinationAddress = destinationAddress;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public DateTime getDate() {
return date;
}
public void setDate(DateTime date) {
this.date = date;
}
public Long getDistance() {
return distance;
}
public void setDistance(Long distance) {
this.distance = distance;
}}
存儲庫類:
public interface TransitRepository extends JpaRepository<Transit, Long> {
List<Transit> findAllByStartDateGreaterThanEqualAndEndDateLessThanEqual(DateTime startDate, DateTime endDate);
}
控制器類:
@RestController
@RequestMapping("/transit")
public class TransitController {
private TransitService transitService;
@Autowired
public void setTransitService(TransitService transitService) {
this.transitService = transitService;
}
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void addTransit(@RequestBody Transit transit){
transitService.calculateDistance(transit);
transitService.addTransit(transit);
System.out.println(transit);
}
@RequestMapping(path = "reports/daily", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE)
public void getDailyReport(){}
}
和服務等級:
@Service
public class TransitService {
private TransitRepository transitRepository;
public static final String API_KEY = "xxxxxx";
@Autowired
public void setTransitRepository(TransitRepository transitRepository) {
this.transitRepository = transitRepository;
}
public void addTransit(Transit transit) {
transitRepository.save(transit);
}
public void calculateDistance(Transit transit) {
GeoApiContext geoApiContext = new GeoApiContext.Builder().apiKey(API_KEY).build();
DistanceMatrixApiRequest request = DistanceMatrixApi.newRequest(geoApiContext);
DistanceMatrix result = request.origins(transit.getSourceAddress())
.destinations(transit.getDestinationAddress())
.mode(TravelMode.DRIVING)
.units(Unit.METRIC)
.awaitIgnoreError();
long distance = result.rows[0].elements[0].distance.inMeters;
transit.setDistance(distance);
}
public void countDaily(List<Transit> transitList){
}
}
您應該在需要添加到方法中的參數上使用注釋@RequestParam
。 注釋中的名稱是可選的,默認為參數名稱。
@RequestMapping(path = "reports/daily", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE)
public void getDailyReport(@RequestParam("start_date") String startDate, @RequestParam String end_date){}
}
將字段添加到您的Transit
類中將不起作用,因為GET-Request沒有請求正文,並且參數也始終不在正文中。
您應該在控制器方法中使用@RequestParam
批注。
@RequestMapping(path = "reports/daily", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE)
public void getDailyReport(@RequestParam("start_date") String startDate, @RequestParam("end_date") String endDate){
// Create a method in service class, that takes startDate and endDate as parameters.
// And inside that method, you can write a SQL query to find the distance & price for the given date parameters
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.