我正在尝试在我的项目的 jsp 页面中创建一个表单,该表单将发送创建 CD 对象所需的信息。我知道这适用于 JSON,因为当我使用名为 postman 的 Google 插件时,我可以使用 json 发出发布请求并将新 cd 添加到所有 cd 的列表中。
虽然我需要制作一个 GUI 客户端,它可以使用 json 但显示解析的信息。我将发布一些类(class)。我已经搜索了该站点,但在这里找不到任何可以真正帮助我的东西。我收到不受支持的媒体类型错误...我想是因为我需要在发送数据之前以某种方式解析为 json?
@Path("/cd")
public class CDResources {
CDService c = new CDService();
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public CD addCD(CD cd)
{
return c.addCD(cd);
}
这是表格
<form action="webapi/cd/" method="post">
<p>
Artist : <input type="text" name="artist" />
</p>
<p>
Artist : <input type="number" name="numberOfTracks" />
</p>
<p>
Artist : <input type="text" name="title" />
</p>
<input type="submit" value="Submit" />
</form>
光盘类
package Assignment.crud.model;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class CD {
String title;
int numberOfTracks;
String artist;
long id;
public CD() {
}
public CD(long id,String title,String artist,int numberOfTracks) {
super();
this.title = title;
this.numberOfTracks = numberOfTracks;
this.artist = artist;
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getNumberOfTracks() {
return numberOfTracks;
}
public void setNumberOfTracks(int numberOfTracks) {
this.numberOfTracks = numberOfTracks;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
光盘服务类
package Assignment.crud.service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import Assignment.crud.database.DatabaseClass;
import Assignment.crud.model.CD;
public class CDService {
private Map<Long, CD> cds = DatabaseClass.getCDs();
public CDService()
{
cds.put(1L, new CD(1,"Fleet Foxes","Helplessness Blues",10));
cds.put(2L, new CD(2,"Van Morrison","Tupelo Honey",12));
}
public List<CD> getAllCDs()
{
return new ArrayList<CD>(cds.values());
}
public CD getCD(long id)
{
return cds.get(id);
}
public CD addCD(CD cd)
{
cd.setId(cds.size()+1);
cds.put(cd.getId(), cd);
return cd;
}
public CD updateCD(CD cd)
{
if(cd.getId()<=0)
{
return null;
}
cds.put(cd.getId(), cd);
return cd;
}
public CD removeCD(long id)
{
return cds.remove(id);
}
}
最佳答案
HTML 表单(除非您使用的是 AJAX)将以 application/x-www-form-urlencoded
数据类型发送数据。所以你需要修复你的资源方法来接受这种类型
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public CD addCD(@FormParam("artist") String artist,
@FormParam("title") String title,
@FormParam("numberOfTracks") int numberOfTracks) {
}
您可能还想发送重定向以跟随 Post/Redirect/Get模式。
public Response addCD(...) {
return Response.seeOther(...someUrl).build()
}
您可能还想考虑使用一些 AJAX 库来发出请求,而不是使用基本的 HTML 表单。这就是 REST API 的工作方式。
关于java - 带有 JAX-RX 的 REST API 从 jsp 页面中的表单发送和接收已解析的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42799721/