Spring引导 - 在http.get中使用rest控制器的angularjs返回状态404

问题描述 投票:0回答:1

我试图从服务器获取数据使用JPA存储库和spring restcontroller传递给angularjs的http.get方法。但是当我在console.log中查看它时,它显示:angular.js:11048 GET http://127.0.0.1:8096/api/shipmentcount/sample 404(Not Found)。什么似乎是错的?

master.controller.js - 函数

    $scope.countTrips = function() {
    $http.get("/api/shipmentcount/sample").success(function(response) {
        console.log(response);
    });
}

$scope.countTrips();

ShipmentResources.java - 使用方法get请求映射

@RequestMapping(value="/shipmentcount/sample", method=RequestMethod.GET)
public List<Shipment> getshipmentCount() {
    return shipmentRepository.findAll();
}

shipment repository.Java

    package com.pahrsek.smartfleet.repository;

import java.util.Date;
import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import com.pahrsek.smartfleet.dto.ShipmentSummary;
import com.pahrsek.smartfleet.model.Company;
import com.pahrsek.smartfleet.model.Customer;
import com.pahrsek.smartfleet.model.Shipment;
import com.pahrsek.smartfleet.model.Shipment.Status;
import com.pahrsek.smartfleet.model.Vehicle;

@Repository
public interface ShipmentRepository extends JpaRepository<Shipment, Long>, JpaSpecificationExecutor<Shipment>{



    @Query( value="select new com.pahrsek.smartfleet.dto.ShipmentSummary(ship.status as status, "
            + "count(ship.id) as recordCount "
            + ") from Shipment ship where ship.company=?1 and ship.dateCreated>=?2 AND ship.dateCreated <=?3  group by ship.status")
    public List<ShipmentSummary> summaryByStatus(Company company, Date from, Date to);

    public List<Shipment> findFirst10ByVehicle(Vehicle vehicle);

    public List<Shipment> findByVehicle(Vehicle vehicle);

    public Shipment findByIdAndCompany(Long id, Company company);

    public List<Shipment> findByStatus(Status status);

    public List<Shipment> findByCustomerAndDepotAndOriginAndTypeAndCommodityTypeAndDateCreatedAfter(Customer customer, String depot, String origin, String type, String commodityType, Date dateCreated);

}

这是日志enter image description here

这是Shipment.java

    package com.pahrsek.smartfleet.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;


/**
 * Delivery of goods
 * @author JRDomingo
 *
 */
@Entity
@Table(name="shipment")
public class Shipment {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long id;

    @Column(name="booking_number",unique=true)
    public String bookingNumber;

    @Column(name="wb_number")
    public String wbNumber;

    @ManyToOne
    @JoinColumn(name="vehicle_id", referencedColumnName="id")
    public Vehicle vehicle;

    @ManyToOne
    @JoinColumn(name="customer_id", referencedColumnName="id")
    public Customer customer;

    public String origin;

    public String depot;

    @ManyToOne
    @JoinColumn(name="vendor_id", referencedColumnName="id")
    public Vendor vendor;

    public String type;

    @Column(name="commodity_type")
    public String commodityType;

    @Column(name="truck_type")
    public String truckType;

    @Enumerated(EnumType.STRING)
    public Status status;

    @Column(name="delivery_date")
    public Date deliveryDate;

    @Column(name="fuel_po")
    public String fuelPo;

    @Column(name="client_ref_no")
    public String clientReferenceNumber;

    public String remarks;

    @ManyToOne
    @JoinColumn(name="driver_id",referencedColumnName="id")
    public Personnel driver;

    @ManyToOne
    @JoinColumn(name="helper1_id",referencedColumnName="id")
    public Personnel helper1;

    @ManyToOne
    @JoinColumn(name="helper2_id",referencedColumnName="id")
    public Personnel helper2;


    public enum Status{
        New, Dispatched, Delivered, Completed, Cancelled
    }

    /******
     * ACTUAL DATES IMPLEMENTED
     ******/
    @Column(name="date_created")
    public Date dateCreated;

    @Column(name="date_dispatched")
    public Date dateDispatched;

    @Column(name="date_completed")
    public Date dateCompleted;

    @Column(name="date_cancelled")
    public Date dateCancelled;

    @Column(name="date_received")
    public Date dateReceived;

    @Column(name="farthest_destination")
    public String farthestDestination;

    @Column(name="client_rate")
    public Double clientRate;

    @Column(name="is_sub_con")
    public boolean isSubCon;

    @Column(name="sub_con_rate")
    public Double subConRate;

    @Column(name="fuel")
    public Double fuel;

    @Column(name="fuel_amount")
    public Double fuelAmount;

    @Column(name="route_code")
    public String routeCode;

    @ManyToOne
    @JsonIgnore
    @JoinColumn(name="dispatched_odometer_id",referencedColumnName="id")
    public RegularOdometerUsage dispatchedOdometer;

    @ManyToOne
    @JsonIgnore
    @JoinColumn(name="delivered_odometer_id",referencedColumnName="id")
    public RegularOdometerUsage deliveredOdometer;

    @ManyToOne
    @JsonIgnore
    @JoinColumn(name="completed_odometer_id",referencedColumnName="id")
    public RegularOdometerUsage completedOdometer;


    /**
     * index 0 = Driver , index 1 = Helper1, index 2 = Helper2
     */
    @JsonIgnore
    @OneToMany(mappedBy="shipment",targetEntity=PersonnelRate.class)
    public List<PersonnelRate> personnelRates = new ArrayList<PersonnelRate>();

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name="company_id", referencedColumnName="id")
    public Company company;


    @JsonIgnore
    @ManyToOne
    @JoinColumn(name="prepared_user_id", referencedColumnName="id")
    public User preparedBy;


    @JsonIgnore
    @ManyToOne
    @JoinColumn(name="customer_invoice", referencedColumnName="id")
    public CustomerInvoice customerInvoice;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name="trucker_settlement", referencedColumnName="id")
    public TruckerSettlement truckerSettlement;

}

我想要做的是获取表装运中的状态列。我尝试创建一个休息控制器并将其与前端的angularjs集成。我找不到导致问题的原因。我认为它无法找到控制器/ api / shipmentcount / sample。我是春季靴子的新手。这是我第一次开发它。我正在尝试使用其他控制器,我想从服务器获取数据,以便在我的仪表板中的图表中使用。我使用chart.js作为我的图表。

这是我完整的ShipmentResource.java - 控制器

    package com.pahrsek.smartfleet.web.rest;

import java.net.URISyntaxException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.pahrsek.smartfleet.dto.ShipmentDTO;
import com.pahrsek.smartfleet.dto.ShipmentSummary;
import com.pahrsek.smartfleet.dto.SimpleVehicle;
import com.pahrsek.smartfleet.model.Company;
import com.pahrsek.smartfleet.model.Shipment;
import com.pahrsek.smartfleet.model.Shipment.Status;
import com.pahrsek.smartfleet.model.ShipmentCharge;
import com.pahrsek.smartfleet.model.Vehicle;
import com.pahrsek.smartfleet.repository.PersonnelRateRepository;
import com.pahrsek.smartfleet.repository.PersonnelRepository;
import com.pahrsek.smartfleet.repository.ShipmentChargeRepository;
import com.pahrsek.smartfleet.repository.ShipmentRepository;
import com.pahrsek.smartfleet.security.SecurityUtils;
import com.pahrsek.smartfleet.service.ShipmentService;
import com.pahrsek.smartfleet.web.rest.filter.ShipmentFilter;
import com.pahrsek.smartfleet.web.rest.filter.VehicleFilter;
import com.pahrsek.smartfleet.web.rest.util.PaginationUtil;

@RestController
@RequestMapping("/api")
public class ShipmentResource {

    private static final Logger logger = LoggerFactory.getLogger(ShipmentResource.class);

    @Autowired
    ShipmentService shipmentService;

    @Autowired
    ShipmentRepository shipmentRepository;

    @Autowired
    PersonnelRateRepository personnelRateRepository;

    @Autowired
    PersonnelRepository personnelRepository;

    @Autowired
    ShipmentChargeRepository shipmentChargeRepository;

//  @Value("#{'${jentec.shipmentTypes}'.split(',')}")
    public List<String> shipmentTypes;

    @Value("${jentec.shipment.footer}")
    public String shipmentFooter;

    @RequestMapping(value="/shipments", method=RequestMethod.POST)
    public void create(@RequestBody ShipmentDTO request){
        Company company = SecurityUtils.getCurrentCompany();
        String depot = null;

        Shipment shipment = shipmentService.save(request,company);
        logger.info("shipment saved:{}",shipment);
    }


    @RequestMapping(value="/shipments/{shipmentId}/status", method=RequestMethod.POST)
    public void saveDispatch(@PathVariable("shipmentId")Long shipmentId, @RequestBody UpdateStatusDTO request){
        shipmentService.updateStatus(shipmentId, request);
    }

    @RequestMapping(value="/shipmentcount", method=RequestMethod.GET)
    public List<Shipment> getshipmentCount() {
        return shipmentRepository.findAll();
    }

    @RequestMapping(value="/shipments", method=RequestMethod.GET)
    public ResponseEntity<List<ShipmentDTO>> list(@RequestParam(value="page", defaultValue="1") int page, 
            @RequestParam(value="per_page", defaultValue="10") int size,
            @RequestParam(value="sort", defaultValue="id") String sort,
            @RequestParam(value="direction", defaultValue="DESC") Direction direction,
            HttpServletRequest request) throws URISyntaxException{
        Pageable pageRequest = PaginationUtil.generatePageRequest(page, size, new Sort(direction,sort));
        Company company = SecurityUtils.getCurrentCompany();
        String depot = SecurityUtils.getCurrentDepot();
        Page<Shipment> pageResult = shipmentRepository.findAll(new ShipmentFilter(request, company, depot), pageRequest);
        HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(pageResult, "/api/shipments", page, size);
        List<ShipmentDTO> shipmentDTOs = new ArrayList<ShipmentDTO>();
        for(Shipment shipment:pageResult.getContent()){
            shipmentDTOs.add(new ShipmentDTO(shipment, true));
        }

        return new ResponseEntity<List<ShipmentDTO>>(shipmentDTOs, headers, HttpStatus.OK);
    }


    @RequestMapping(value="/shipments/summary", method=RequestMethod.GET)
    public List<ShipmentSummary> getSummary(@RequestParam("from") String from, @RequestParam("to") String to) throws URISyntaxException{
        Company company = SecurityUtils.getCurrentCompany();
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
        try {
            return shipmentRepository.summaryByStatus(company, df.parse(from), df.parse(to));
        } catch (ParseException e) {
            logger.error("Cannot parse date",e);
            return new ArrayList<ShipmentSummary>();
        }
    }

    @RequestMapping(value="/shipmentTypes")
    public List<String> getShipmentTypes(){
        return shipmentTypes;
    }

    @RequestMapping(value="/shipments/{id}", method=RequestMethod.GET)
    public ResponseEntity<ShipmentDTO> get(@PathVariable("id") Long id) throws URISyntaxException{
        Company company = SecurityUtils.getCurrentCompany();
        Shipment shipment = shipmentRepository.findOne(id);
        return new ResponseEntity<ShipmentDTO>(new ShipmentDTO(shipment, true), HttpStatus.OK);
    }

    @RequestMapping(value="/shipments/{id}/charges", method=RequestMethod.GET)
    public List<ShipmentCharge> getCharges(@PathVariable("id") Long shipmentId){
        return shipmentChargeRepository.findByShipmentId(shipmentId);
    }


    @RequestMapping(value="/shipmentFooter", method=RequestMethod.GET)
    public Map<String,String> getShipmentFooter(){
        Map<String,String> footer = new HashMap<String,String>();
        footer.put("message", shipmentFooter);
        return footer;
    }

    public static class UpdateStatusDTO{
        public Status status;
        public Date date;
        //for delivery date
        public Date deliveryDate;
        public Integer odometer;
        public Double clientRate;
        public String remarks;
        public String farthestDestination;
        public Double fuel;
        public String fuelPo;
        public Double fuelAmount;
        public String clientReference;
        public String routeCode;
    }
}
angularjs spring-boot spring-data-jpa
1个回答
0
投票

从我在你的问题中看到的,你似乎有不同的路径。你打电话给:angularJS中的"/api/shipmentcount/sample",但你已经宣布:"/shipmentcount/sample"中的@RequestMapping。你缺少"/api"部分。

检查你的控制器是否有注释:@RequestMapping(value="/api")

如果没有,请检查你的appication.properties文件,如果你有类似的东西:server.contextPath=/api

如果不是,您可以更正您的端点方法,如下所示:

@RequestMapping(value="/api/shipmentcount/sample", method=RequestMethod.GET)
public List<Shipment> getshipmentCount() {
    return shipmentRepository.findAll();
}

另外,如果angularJS在不同的域或端口上运行,则需要提供服务器域和端口。

例如,如果角度在http://127.0.0.1:4200上运行,而你的服务器在http://127.0.0.1:8096上运行,你需要像这样纠正它:

$http.get("http://127.0.0.1:8096/api/shipmentcount/sample").success(function(response) {
    console.log(response);
});

您还需要允许CORS才能从不同的域发出请求。您可以使用方法上方的注释来执行此操作:@CrossOrigin

我希望有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.