java - 使用 POST 调用使用 REST Web 服务返回 415

标签 java web-services rest

我对基于 REST 的 Web 服务还很陌生。我正在尝试调用我创建的一个小型 REST WS,其开头如下所示

    package webServices;

import java.net.UnknownHostException;

import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.json.JSONException;
import org.json.JSONObject;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;



@Path("/login")
public class LoginService {



    @Path("/isUp")
    @GET
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })

    public String checkServiceStatus(){

        return "up and running";

    }

    @Path("/authenticate")
    @POST
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public String authenticateUser(@FormParam("user") String user, @FormParam("password") String pwd){


        DB db;
        DBCollection coll;

        MongoClient mongoClient;
        String loginResponse="user does not exist";
        try {
            mongoClient = new MongoClient( "localhost" , 27017 );

            db = mongoClient.getDB( "Hackathon" );
            coll = db.getCollection("users");

            BasicDBObject filter = new BasicDBObject();
            filter.put("user", user);
            BasicDBObject selectField = new BasicDBObject();
            selectField.put("password", 1);
            selectField.put("_id", 0);

            DBCursor cursor = coll.find(filter, selectField);
            String jsonString = cursor.next().toString();
            JSONObject json = new JSONObject(jsonString);
            String password = json.getString(user);
            System.out.println("password "+password);

            if(password.equals(pwd)){
                loginResponse="success";
                System.out.println("success");
            }else{
                loginResponse="failure";
                System.out.println("failure");
            }


        } catch (UnknownHostException e) {

            e.printStackTrace();
        } catch (JSONException e) {

            e.printStackTrace();
        }


        return loginResponse;
    }   

}

每当我使用表单数据从 Chrome postman 调用相同的 POST 服务时

http://localhost:8080/HackDataEngine/login/authenticate
Content-Type application/json
user admin

password admin

POSTMAN call screenshot

我得到以下回复

<html>
    <head>
        <title>Apache Tomcat/7.0.67 - Error report</title>
        <style>
            <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}-->
        </style>
    </head>
    <body>
        <h1>HTTP Status 415 - Unsupported Media Type</h1>
        <HR size="1" noshade="noshade">
            <p>
                <b>type</b> Status report
            </p>
            <p>
                <b>message</b>
                <u>Unsupported Media Type</u>
            </p>
            <p>
                <b>description</b>
                <u>The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.</u>
            </p>
            <HR size="1" noshade="noshade">
                <h3>Apache Tomcat/7.0.67</h3>
            </body>
        </html>

最佳答案

您需要在 Postman 中正确设置 header

在您的请求选项卡中,按“标题”并设置一个如下所示的新变量。

  • 内容类型 -> application/json

关于java - 使用 POST 调用使用 REST Web 服务返回 415,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997270/

相关文章:

java - 如何可视化方法调用的所有方式

asp.net-mvc - WCF客户端实例化

c# - ASMX 网络服务 - 返回 JSON 而不是 XML

php - 如何使用 cURL 在 php 中调用 Base crm REST api?

rest - 通过 REST 上传/下载大文件

java - Spring Boot 以自己的对象作为键返回 Map 的问题

java - applicationContext.xml 的问题,设置 Hibernate、Spring MVC 和 MySql

java - 如何将 printStackTrace 存储到字符串中

java - 内存大小为 16GB 的 Windows8 机器将支持多少 maxheapsize?

c# - 如何通过网络服务流式传输文档?