2017-04-11 100 views
0

我有java EE項目。我在此項目上使用Spring Hibernate作爲服務器端和Backbone,RequireJS,Jquery作爲客戶端。我嘗試使用POST方法保存但HTTP 415錯誤返回。java-POST方法415錯誤

我的Get方法工作正常。我在郵差上測試了它。

我的網址:本地主機:8080/REST /旅遊

EDITED

我的資源類

@Component 
@Path("/travel") 
public class TravelResource { 

     @Autowired 
     private TravelService travelService; 
     @Autowired 
     private UserService userService; 

    @POST 
    @Produces(MediaType.APPLICATION_JSON+ ";charset=UTF-8") 
    @Consumes(MediaType.APPLICATION_JSON) 
     public TravelDTO save(TravelDTO dto) { 
     dto.setUser(userService.get(dto.getUser().getUserID())); 
      dto.setTravelStart(new Date()); 
      dto.setTravelEnd(new Date()); 

      return travelService.save(dto); 
     } 

    @PUT 
    @Path("/{travelID}") 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
     public TravelDTO edit(@PathParam("travelID") int id, TravelDTO dto) { 
     dto.setUser(userService.get(dto.getUser().getUserID())); 
     dto.setTravelStart(new Date()); 
     dto.setTravelEnd(new Date()); 

     return travelService.edit(id,dto); 
     } 

    @DELETE 
    @Path("/{travelID}") 
    @Produces(MediaType.TEXT_PLAIN) 
     public int delete(@PathParam("travelID") int id) { 
     travelService.delete(id); 
     return id; 
     } 
    @GET 
    @Path("/{travelID}") 
    @Produces(MediaType.APPLICATION_JSON) 
     public TravelDTO get(int id) { 
     return travelService.get(id); 
     } 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
     public List<TravelDTO> getAll() { 
     return travelService.getAll(); 

     } 

    @GET 
    @Path("/search/{travelStart}/{travelEnd}/") 
    @Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8") 
    public List<TravelDTO> search(@PathParam("travelStart") Date travelStart, 
            @PathParam("travelEnd") Date travelEnd) 
    { 
     return travelService.search(travelStart,travelEnd); 
    } 

} 

我的DTO類

public class TravelDTO implements Serializable { 

    public TravelDTO convert(Travel model) { 
     this.setTravelID(model.getTravelID()); 
     this.setTravelCost(model.getTravelCost()); 
     this.setTravelStart(model.getTravelStart()); 
     this.setTravelEnd(model.getTravelEnd()); 
     this.setLocation(model.getLocation()); 
     this.setTravelPurpose(model.getTravelPurpose()); 
     this.setProjectCode(model.getProjectCode()); 
     this.setUser(new UserDTO().convert(model.getUser())); 
     return this; 
    } 
     private int travelID; 

     private String projectCode; 

     private Date travelStart; 

     private Date travelEnd; 

     private String Location; 

     private float travelCost; 

     private UserDTO user; 

     private String travelPurpose; 

    public UserDTO getUser() { 
     return user; 
    } 

    public void setUser(UserDTO user) { 
     this.user = user; 
    } 

    public String getProjectCode() { 
     return projectCode; 
    } 

    public void setProjectCode(String projectCode) { 
     this.projectCode = projectCode; 
    } 

    public int getTravelID() { 
      return travelID; 
     } 

     public void setTravelID(int travelID) { 
      this.travelID = travelID; 
     } 

     public Date getTravelStart() { 
      return travelStart; 
     } 

     public void setTravelStart(Date travelStart) { 
      this.travelStart = travelStart; 
     } 

     public Date getTravelEnd() { 
      return travelEnd; 
     } 

     public void setTravelEnd(Date travelEnd) { 
      this.travelEnd = travelEnd; 
     } 

     public String getLocation() { 
      return Location; 
     } 

     public void setLocation(String location) { 
      Location = location; 
     } 

     public float getTravelCost() { 
      return travelCost; 
     } 

     public void setTravelCost(float travelCost) { 
      this.travelCost = travelCost; 
     } 

     public String getTravelPurpose() { 
      return travelPurpose; 
     } 

     public void setTravelPurpose(String travelPurpose) { 
      this.travelPurpose = travelPurpose; 
     } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     TravelDTO travelDTO = (TravelDTO) o; 

     return travelID == travelDTO.travelID; 
    } 

    @Override 
    public int hashCode() { 
     return travelID; 
    } 
} 

MY服務類

@Service 
public class TravelService { 
     @Autowired 
     private TravelDAO travelDAO; 

     @Transactional 
     @ResponseBody 
     public TravelDTO save(TravelDTO dto) { 
      Travel station = new Travel(); 
      station.convert(dto); 
      try { 
       station = travelDAO.persist(station); 
      } catch (Exception e) { 
       return null; 
      } 
      return dto.convert(station); 
     } 

     @Transactional 
     @ResponseBody 
     public TravelDTO edit(int id, TravelDTO dto) { 
      Travel travel = new Travel(); 
      try { 
       travel.convert(dto); 
       travelDAO.merge(travel); 
      } catch (Exception e) { 
       return null; 
      } 
      return dto.convert(travel); 
     } 

     @Transactional 
     @ResponseBody 
     public boolean delete(int id) { 
      try { 
       Travel travel = travelDAO.find(id); 
       travelDAO.remove(travel); 
      } catch (Exception e) { 
       return false; 
      } 
      return true; 
     } 

     public TravelDTO get(int id) { 
      Travel travel; 
      try { 
       travel = travelDAO.find(id); 
      } catch (Exception e) { 
       return null; 
      } 
      return new TravelDTO().convert(travel); 
     } 

     public List<TravelDTO> getAll() { 
      List<TravelDTO> travelDTOList = new ArrayList<TravelDTO>(); 
      try { 
       for (Travel travel : travelDAO.findAll()) 
        travelDTOList.add(new TravelDTO().convert(travel)); 
      } catch (Exception e) { 
       return null; 
      } 
      return travelDTOList; 
     } 

     public List<TravelDTO> search(Date startTime, Date endTime) 
             { 
      List<TravelDTO> travelDTOList = new ArrayList<TravelDTO>(); 
      try { 
       for (Travel station : travelDAO.search(startTime, endTime)) 
        travelDTOList.add(new TravelDTO().convert(station)); 
      } catch (Exception e) { 
       return null; 
      } 
      return travelDTOList; 
     } 




} 

我的數據:

model:{"Location":"s","projectCode":"51","travelPurpose":"s","travelStart":"1.1.1","travelEnd":"8.12.2016"} 

網絡TAB

enter image description here

+0

415不支持的媒體類型 請求實體擁有的服務器或資源不支持的媒體類型。例如,客戶端將圖像上傳爲image/svg + xml,但服務器要求圖像使用不同的格式。你能發佈正在發送的消息嗎? –

+0

添加我的帖子數據@MosheArad – real

+0

您應該在這裏添加DTO對象結構。模型類不是必需的。 – gaganbm

回答

1

我錯誤的原因是這樣的骨幹代碼:

Backbone.emulateJSON = true; 

如果Backbone.emulateJSON=trueContent-Type= application/x-www-form-urlencoded

現在Backbone.emulateJSON=false;問題解決!

0
@POST 
    @Produces(MediaType.APPLICATION_JSON+ ";charset=UTF-8") 
    @Consumes(MediaType.APPLICATION_JSON) 
     public TravelDTO save(TravelDTO dto) { 
     dto.setUser(userService.get(dto.getUser().getUserID())); 
      dto.setTravelStart(new Date()); 
      dto.setTravelEnd(new Date()); 

      return travelService.save(dto); 
     } 

你返回:return travelService.save(dto);

你宣佈你正在返回一個HTT P JSON,

然後只需向您的控制器添加註釋@RestController而不是@Controller

或者只是添加到您的方法@ResponseBody註釋。

+0

我正在使用Rest.So我沒有控制器class.I只是(模型,服務,資源,dao和dto)但我添加@ResponseBody到POST方法,但同樣的415錯誤繼續 – real

+0

你是什麼意思「我沒有控制器「?如果您在Spring中不使用控制器,您希望從您的服務器接收最終用戶的請求嗎? –

+0

https://gist.github.com/berat703/1b54549eecfc4e09534fe1b24e824591 。我的服務類期望從我的服務器接收來自最終用戶的請求。我應該刪除「@Service」並添加「@RestController」? – real

1

HTTP 415正值當

The origin server is refusing to service the request because the payload is in 
a format not supported by this method on the target resource. 

編號:https://httpstatuses.com/415

您需要正確設置請求頭。根據你所附的圖片,你正在通過Content-Type: application/x-www-form-urlencoded。 但您的代碼需要application/json

0

添加下列內容請行家:

<dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>${jackson2.version}</version> 
    </dependency>