使用Python请求调用Java Web服务

使用Python请求调用Java Web服务,java,python,web-services,python-requests,Java,Python,Web Services,Python Requests,我有一个简单的Java REST Web服务- @GET @路径(“/get1”) @产生(MediaType.APPLICATION_JSON) @使用(MediaType.APPLICATION_JSON) 公共状态getstudent(跟踪){ System.out.println(“GET1 title=“+track.getTitle()); System.out.println(“GET1 singer=“+track.getSinger()); 状态=新状态(); 状态。设置状态标

我有一个简单的Java REST Web服务-

@GET
@路径(“/get1”)
@产生(MediaType.APPLICATION_JSON)
@使用(MediaType.APPLICATION_JSON)
公共状态getstudent(跟踪){
System.out.println(“GET1 title=“+track.getTitle());
System.out.println(“GET1 singer=“+track.getSinger());
状态=新状态();
状态。设置状态标志(“成功”);
返回状态;
}
跟踪

公共类曲目{
字符串标题;
弦乐歌手;
公共字符串getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共字符串getSinger(){
回归歌手;
}
公共歌手(弦乐歌手){
这个歌手=歌手;
}
@凌驾
公共字符串toString(){
返回“曲目[title=“+title+”,singer=“+singer+”]”;
}
}
Python请求模块:-

导入请求
标题={“标题”:“最佳歌曲”,“歌手”:“幸运”}
r=请求。获取(“http://localhost:8080/StudentService/rest/insert/get1“,数据=标题)
打印r.content
错误


HTTP状态415-不支持的媒体类型

类型状态报告

消息不支持的媒体类型

描述 服务器拒绝了此请求,因为请求实体为 以请求的资源不支持的格式为请求的 方法。

ApacheTomcat/6.0.41

是否有方法创建实体对象并发送它?

您需要使用
参数来发送URL参数;您正在尝试发送请求正文

您需要更改服务以接受表单参数:

@GET
@Path("/get1")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Status getstudent(
        @FormParam("title") String title,
        @FormParam("singer") String sing) {
    System.out.println("GET1 title = " + title);
    System.out.println("GET1 singer = " + singer);
    Status status = new Status();
    status.setStatus_flag("success");
    return status;
}
params = {"title": "Best Songs", "singer": "lucky"}
r = requests.get(
    "http://localhost:8080/StudentService/rest/insert/get1",
    params=params)
现在,您可以发送URL编码的参数:

@GET
@Path("/get1")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Status getstudent(
        @FormParam("title") String title,
        @FormParam("singer") String sing) {
    System.out.println("GET1 title = " + title);
    System.out.println("GET1 singer = " + singer);
    Status status = new Status();
    status.setStatus_flag("success");
    return status;
}
params = {"title": "Best Songs", "singer": "lucky"}
r = requests.get(
    "http://localhost:8080/StudentService/rest/insert/get1",
    params=params)

只需添加内容类型并在标题中接受即可。比如:

headers = {"Content-Type": "application/json", "Accept": "application/json"}
r = requests.get("http://localhost:8080/StudentService/rest/insert/get1", data=title, headers=headers)

@user1050619:那么您的Java服务需要JSON请求吗?是的,它现在需要JSON请求..我现在已经编辑了web方法@consumes(只接受JSON请求)…仍然没有working@user1050619:我不熟悉Java REST服务器;不知道这是否需要一个POST请求。@user1050619:查看您应该真正使用
@Consumes(MediaType.APPLICATION\u FORM\u URLENCODED)
@FormParam
来指定标题和歌手。