Java RESTAPI和JAX-RX在jsp页面中从表单发送和接收解析的JSON
我试图在我的项目的jsp页面中创建一个表单,该表单将发送创建CD对象所需的信息。我知道这对JSON有效,因为当我使用名为postman的Google插件时,我可以使用JSON发出post请求,它会将新cd添加到所有cd的列表中 虽然我需要制作一个GUI客户机,它将使用json,但会显示解析的信息。我将发布一些课程。我已经搜索了这个网站,但在这里找不到任何能真正帮助我的东西。我收到一个不受支持的媒体类型错误。。。我猜是因为我需要在发送数据之前解析为jsonJava RESTAPI和JAX-RX在jsp页面中从表单发送和接收解析的JSON,java,json,rest,jsp,jersey,Java,Json,Rest,Jsp,Jersey,我试图在我的项目的jsp页面中创建一个表单,该表单将发送创建CD对象所需的信息。我知道这对JSON有效,因为当我使用名为postman的Google插件时,我可以使用JSON发出post请求,它会将新cd添加到所有cd的列表中 虽然我需要制作一个GUI客户机,它将使用json,但会显示解析的信息。我将发布一些课程。我已经搜索了这个网站,但在这里找不到任何能真正帮助我的东西。我收到一个不受支持的媒体类型错误。。。我猜是因为我需要在发送数据之前解析为json @Path("/cd") public
@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>
CD服务类
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);
}
}
package Assignment.crud.service;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Map;
导入Assignment.crud.database.DatabaseClass;
导入Assignment.crud.model.CD;
公共类CDS服务{
私有映射cds=DatabaseClass.getCDs();
公共服务
{
CD.put(1L,新CD(1,“舰队狐狸”,“无助蓝调”,10));
CD.put(2L,新CD(2,“范莫里森”,“图佩洛蜂蜜”,12));
}
公共列表getAllCDs()
{
返回新的ArrayList(cds.values());
}
公共CD getCD(长id)
{
返回cd.get(id);
}
公共CD添加CD(CD)
{
cd.setId(cds.size()+1);
put(cd.getId(),cd);
返回光盘;
}
公共CD更新CD(CD)
{
if(cd.getId()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) {
}
您可能还希望发送重定向以遵循该模式
您也可以考虑使用一些Ajax库来进行请求,而不是使用基本的HTML表单。这是REST API应该如何工作。
如果您发布您正在获取的错误(如果您正在获得错误)或实际面临的问题,则可能会有所帮助。请<代码>公共CD ADCD(CD CD)。
实际被调用?如何在另一个jsp页面中使用此方法返回的json?通过返回响应并以某种方式将json传递到另一个jsp页面??
@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) {
}
public Response addCD(...) {
return Response.seeOther(...someUrl).build()
}