我目前正在学习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
。
您可以在屏幕截图上看到一些表单数据。
如果有人需要一些其他信息,请询问。 请问您有什么建议。
亲切的问候。
环境: 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