Получить запрос с использованием неподдерживаемого носителя JAX-RS Servlet - PullRequest
0 голосов
/ 19 декабря 2018

При использовании JAX-RS в затмении я получаю сообщение об ошибке

HTTP ERROR 415.

Если я удаляю "/ {TR_ID]" из "@Path ("/ TRData / {TR_ID}") "и не TR_ID в операторе выбора, он работает нормально и возвращает строки.Я хочу ограничить возвращаемые строки одной строкой, которая соответствует TR_ID в базе данных.Значение TR_ID задается пользователем в URL, например ~ / TRData / 330377

Мой файл класса выглядит следующим образом:

@Path("/TRData/{TR_ID}")
    @GET
    @Produces({ MediaType.APPLICATION_JSON })
    @Consumes({ MediaType.APPLICATION_JSON})
    public String getTRData(@PathParam("TR_ID") String TRID, @Context HttpServletRequest request, HttpServletResponse response) throws JSONException {

        String PNo = UMFactory.getAuthenticator().getLoggedInUser().getUniqueName();
        String TR_ID = TRID;


        try {

            System.err.println("Start TR Details");
            Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection("jdbc:oracle:thin:@ip:1521:mydb", "my_user", "myPassword");



String TRQuery="SELECT VTR.TRANSPORT_REQUEST_ID, VTR.PNO, (SELECT NAME FROM MR_HRS_EMPLOYEE WHERE REG_NO = VTR.PNO AND EMPLOYER_CODE = VTR.EMPLOYER_CODE) EMP_NAME, (SELECT DESIG_SHORT FROM MR_HRS_EMPLOYEE WHERE REG_NO = VTR.PNO AND EMPLOYER_CODE = VTR.EMPLOYER_CODE) DESIG_SHORT, VTR.STATUS, VTR.DRIVER_REQUIRED, VTR.PURPOSE_OF_VISIT, VTR.RECOMMENDED_BY, VTR.EMPLOYER_CODE, VTR.LOCATION_ID, VTR.FROM_TIME, VTR.TO_TIME, VTR.FROM_DATE, VTR.TO_DATE, VTR.CONTACT_NUMBER, VTR.AIRPORT_REQUEST, VTR.FLIGHT_NO, VTR.REQUEST_TYPE, VTR.REJECTED_BY, VTR.REMARKS, VTR.NO_OF_PASSENGERS FROM VMS.VMS_TRANSPORT_REQUEST VTR WHERE     VTR.STATUS = 'I' AND VTR.REQUEST_TYPE = 'O' AND VTR.DELETE_FLAG IS NULL AND VTR.RECOMMENDED_BY = " + PNo + " AND TRANSPORT_REQUEST_ID = " + TR_ID + " AND LOCATION_ID = (SELECT LOCATION_ID FROM MR.MR_HRS_EMPLOYEE WHERE REG_NO = " + PNo + ")";

            // Get AllTR Data from DB & Put it into JSON
                        System.err.println("Getting TR Data");
                        Statement TRStatement = con.createStatement();
                        ResultSet TRRecordSet = TRStatement.executeQuery(TRQuery);


                        ResultSetMetaData rsmd = TRRecordSet.getMetaData();

                        JSONArray TRjson = new JSONArray();

                        while (TRRecordSet.next()) {

                            JSONObject obj = new JSONObject();

                            int numColumns = rsmd.getColumnCount();

                            for (int i = 1; i <= numColumns; i++) {
                                String column_name = rsmd.getColumnName(i);
                                if (rsmd.getColumnType(i) == java.sql.Types.ARRAY) {
                                    obj.put(column_name, TRRecordSet.getArray(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.BIGINT) {
                                    obj.put(column_name, TRRecordSet.getInt(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.BOOLEAN) {
                                    obj.put(column_name, TRRecordSet.getBoolean(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.BLOB) {
                                    obj.put(column_name, TRRecordSet.getBlob(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.DOUBLE) {
                                    obj.put(column_name, TRRecordSet.getDouble(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.FLOAT) {
                                    obj.put(column_name, TRRecordSet.getFloat(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.INTEGER) {
                                    obj.put(column_name, TRRecordSet.getInt(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.NVARCHAR) {
                                    obj.put(column_name, TRRecordSet.getNString(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.VARCHAR) {
                                    obj.put(column_name, TRRecordSet.getString(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.TINYINT) {
                                    obj.put(column_name, TRRecordSet.getInt(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.SMALLINT) {
                                    obj.put(column_name, TRRecordSet.getInt(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.DATE) {
                                    obj.put(column_name, TRRecordSet.getDate(column_name));
                                } else if (rsmd.getColumnType(i) == java.sql.Types.TIMESTAMP) {
                                    obj.put(column_name, TRRecordSet.getTimestamp(column_name));
                                } else {
                                    obj.put(column_name, TRRecordSet.getObject(column_name));
                                }

                            }
                            TRjson.put(obj);

                        }

                        JSONObject mainObj = new JSONObject();

                        mainObj.put("trdata", TRjson);
            return mainObj.toString();

        }
        catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return e.getMessage() + "EX-MESSAGE";
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return e.getMessage() + "EX-MESSAGE";
        }

1 Ответ

0 голосов
/ 20 декабря 2018

Вам не хватает @Context рядом с HttpServletResponse.Это необходимо для инъекции.Кроме того, это метод GET;@Consumes не требуется, так как метод ничего не потребляет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...