2017-04-11 65 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>