Я не понимаю, почему я не могу получить параметры из формы в Java EE - PullRequest
1 голос
/ 24 мая 2019

В настоящее время я изучаю Java EE и выполняю упражнение, в котором вы извлекаете данные из формы, использующей метод POST.Я воспроизводлю код из курса, который я беру, но он не работает для меня.Оригинальный код использует такую ​​строку public Response add(@Context UriInfo info) {String someParam = info.getQueryParameters().getFirst("someParamName"); // and further code}, но она не работает на моей стороне, даже если это простой код.Я спросил инструктора, и пока он не может прийти с ответом, потому что он не видит, где лежит ошибка.Я искал фрагменты кода, и это действительно хороший синтаксис.Так что я абсолютно не понимаю, почему параметры пустые / нулевые.Инструменты разработчика браузера говорят, что есть данные.Код ничего не говорит, чтобы получить (ноль).Вот некоторый код.

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>backOffice</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
  </servlet>
  <servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

add-work-form.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ajouter une oeuvre.</title>
<link rel="stylesheet" type="text/css" href="static/css/styles.css">
</head>
<body>
    <form action="rest/work" accept-charset="utf-8" method="post">
        <fieldset>
            <legend>Information du nouveau titre:</legend>
            <label for="titre">Titre: </label>
            <input type="text" id="titre" name="titre" /><br />
            <label for="annee">Année: </label>
            <input type="text" name="annee" /><br/>
            <label for="genre">Genre: </label>
            <input type="text" id="genre" name="genre" list="listGenre">
            <datalist id="listGenre">
                <option value="Action">
                <option value="Aventure">
                <option value="Sci-Fi">
                <option value="Fantasy">
                <option value="Nul">
            </datalist><br/>
            <label for=artiste>Artiste principal: </label>
            <input type="text" id="artiste" name="artiste" /><br />
            <label for="resume">Résumé: </label>
            <textarea id="resume" name="resume"></textarea><br/>
            <input type="submit" value="Ajouter" />
        </fieldset>
    </form>
</body>
</html>

WorkResource

package com.directmedia.onlinestore.backoffice.resources;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;

import com.directmedia.onlinestore.entity.Artist;
import com.directmedia.onlinestore.entity.Catalogue;
import com.directmedia.onlinestore.entity.Work;

@Path("/work")
public class WorkResource {

    public WorkResource() {

    }

    //@Path("/liste")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Set<Work> liste() {
        if (Catalogue.getListOfWorks().isEmpty()) {
            Set<Work> list = new HashSet<Work>();

            Artist harrisonFord = new Artist("Harrison Ford");
            Artist takuyaKimura = new Artist("Takuya Kimura");
            Artist johnnyDepp = new Artist("Johnny Depp");

            Work w1 = new Work("Blade Runner");
            w1.setRelease(1982);
            w1.setMainArtist(harrisonFord);
            w1.setSummary("Un bidule dans le turfu de sa race qui tue.");
            w1.setGenre("Sci-Fi");

            Work w2 = new Work("Antartica");
            w2.setRelease(1983);
            w2.setMainArtist(takuyaKimura);
            w2.setSummary("Taro et Jiro sont en Antartique. Taro tombes à l'eau keski REST ?");
            w2.setGenre("Drame / Aventure");

            Work w3 = new Work("Transcendence");
            w3.setRelease(2014);
            w3.setMainArtist(johnnyDepp);
            w3.setSummary("Une description de moi. ;P ");
            w3.setGenre("Sci-Fi");

            list.add(w1);
            list.add(w2);
            list.add(w3);

            Catalogue.setListOfWorks(list);
        }

        return Catalogue.getListOfWorks();
    }

    @POST
    public Response add(@Context UriInfo info, @QueryParam("genre") String genre) {
        String titre = info.getQueryParameters().getFirst("titre");
        Date date = new Date();

        System.out.println("\n========\n========");
        System.out.println(date.toString());
        System.out.println("-> Le titre reçu est:" +titre);
        System.out.println("-> Le genre reçu est:" +genre);

        return Response.status(Status.OK).build();
        }

    @PUT
    @Path("/{numero}")
    public Response modify(@PathParam("numero") int numero) {
        System.out.println("L'oeuvre numéro "+numero+" a été modifiée.");
        return Response.status(Status.OK).build();
    }

    @DELETE
    @Path("/{numero}")
    public Response delete(@PathParam("numero") int numero) {
        System.out.println("Suppression du titre dont le numéro est "+numero);
        return Response.status(Status.OK).build();
    }
}

Некоторые выходные данные

========
========
Fri May 24 20:03:50 GMT+01:00 2019
-> Le titre reçu est:null
-> Le genre reçu est:null

Из выходных данных видно, что независимо от метода результат будет null.На скриншоте видно, что есть некоторые данные формы.There is data from the form as the dev tool states

Если кому-то понадобится дополнительная информация, пожалуйста, спросите.Если у вас есть идея предложить, пожалуйста.

С уважением.

Окружение: Windows 10

Eclipse 4.11

JDK 11

Tomcat 9.0.13

jersey.container.servlet 2.25.1

jersey.media.json.jackson 2.25.1

jstl 1.2

...