Java RESTAPI和JAX-RX在jsp页面中从表单发送和接收解析的JSON

Java 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

我试图在我的项目的jsp页面中创建一个表单,该表单将发送创建CD对象所需的信息。我知道这对JSON有效,因为当我使用名为postman的Google插件时,我可以使用JSON发出post请求,它会将新cd添加到所有cd的列表中

虽然我需要制作一个GUI客户机,它将使用json,但会显示解析的信息。我将发布一些课程。我已经搜索了这个网站,但在这里找不到任何能真正帮助我的东西。我收到一个不受支持的媒体类型错误。。。我猜是因为我需要在发送数据之前解析为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>
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()
}