Java 如何使用jax-rs创建POST请求
我有两个类PlaylistResource,它有一个方法createPlaylist,它接受PlaylistRequest类型的对象。我想在localhost:9999/playlists上创建一个POST请求我正在使用Postman,我不确定如何将Playlist请求的对象传递给方法createPlaylistJava 如何使用jax-rs创建POST请求,java,json,rest,web-services,jax-rs,Java,Json,Rest,Web Services,Jax Rs,我有两个类PlaylistResource,它有一个方法createPlaylist,它接受PlaylistRequest类型的对象。我想在localhost:9999/playlists上创建一个POST请求我正在使用Postman,我不确定如何将Playlist请求的对象传递给方法createPlaylist @XmlType(propOrder= {"title", "artistSeeds", "numberOfSongs"}) @XmlAccessorType(XmlAccessTyp
@XmlType(propOrder= {"title", "artistSeeds", "numberOfSongs"})
@XmlAccessorType(XmlAccessType.FIELD)
public class PlaylistRequest {
private String title = "";
@XmlElement(name = "seeds")
private List<String> artistSeeds;
@XmlElement (name = "size")
private int numberOfSongs = 0;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public List<String> getArtistSeeds() {
return artistSeeds;
}
public void setArtistSeeds(List<String> artistSeeds) {
this.artistSeeds = artistSeeds;
}
public int getNumberOfSongs() {
return numberOfSongs;
}
public void setNumberOfSongs(int numberOfSongs) {
this.numberOfSongs = numberOfSongs;
}
}
@XmlType(proporter={“title”,“artistSeeds”,“numberOfSongs”})
@XmlAccessorType(XmlAccessType.FIELD)
公共类播放请求{
私有字符串title=“”;
@xmlement(name=“seeds”)
私人艺人名单;
@xmlement(name=“size”)
私有int numberOfSongs=0;
公共字符串getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共列表getArtistSeeds(){
归还艺术家的种子;
}
public void setArtistSeeds(列出artistSeeds){
this.artistSeeds=artistSeeds;
}
public int getNumberOfSongs(){
返回若干首歌曲;
}
公共无效集合numberOfSongs(int numberOfSongs){
this.numberOfSongs=numberOfSongs;
}
}
另一类:
@Path("playlists")
public class PlaylistResource implements PlaylistApi {
@Override
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response createPlaylist(PlaylistRequest request) {
if(request == null) {
System.out.println("Was here");
throw new ClientRequestException(new ErrorMessage("no parameter passed."));
}
try {
List<Song> playList = new ArrayList<>();
List<Song> songs = new ArrayList<>();
List<String> artistsIds = new ArrayList<>();
ArtistResource artistsResources = new ArtistResource();
int playlistDefaultSize = 10;
int i = 0;
do {
playList.add(songs.get(i));
i++;
}while( i < playlistDefaultSize);
Playlist playlist = new Playlist();
playlist.setTitle(request.getTitle());
playlist.setSize(songs.size());
playlist.setTracks(playList);
return Response.status(Response.Status.CREATED.getStatusCode()).entity(playlist).build();
} catch (Exception e) {
throw new RemoteApiException(new ErrorMessage(e.getMessage()));
}
}
}
@Path(“播放列表”)
公共类播放资源实现播放API{
@凌驾
@职位
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
公共响应createPlaylist(播放请求){
if(请求==null){
System.out.println(“在这里”);
抛出新的ClientRequestException(新的错误消息(“未传递参数”);
}
试一试{
List playList=new ArrayList();
列表歌曲=新建ArrayList();
List artistsIds=new ArrayList();
ArtistResource artistsResources=新的ArtistResource();
int-defaultsize=10;
int i=0;
做{
playList.add(songs.get(i));
i++;
}而(i<0.01)的大小;
Playlist Playlist=新建播放列表();
playlist.setTitle(request.getTitle());
playlist.setSize(songs.size());
播放列表。设置曲目(播放列表);
返回Response.status(Response.status.CREATED.getStatusCode()).entity(playlist.build();
}捕获(例外e){
抛出新的RemoteApiException(新的ErrorMessage(例如getMessage());
}
}
}
只需在请求的Body
中添加JSON
对象,在Postman
中选择Raw JSON
并粘贴以下对象:
注意:在请求的标题
中添加一个键内容类型
,并将其值设置为application/json
{
"title": "Some title",
"artistSeeds": [
"string1",
"string2"
],
"numberOfSongs": 0
}
标题
身体
只需在请求的
正文中添加JSON
对象,在Postman
中选择Raw JSON
并粘贴以下对象:
注意:在请求的标题
中添加一个键内容类型
,并将其值设置为application/json
{
"title": "Some title",
"artistSeeds": [
"string1",
"string2"
],
"numberOfSongs": 0
}
标题
身体
将此参数从数据类更改为字符串
公共响应创建播放列表(播放请求){
到
public Response createPlaylist(字符串请求){
然后使用GSON将其转换为数据类
PlaylistRequest request = new Gson().fromJson(request, new TypeToken<PlaylistRequest >(){}.getType());
播放请求请求=new Gson().fromJson(请求,new TypeToken(){}.getType());
将此参数从数据类更改为字符串
公共响应创建播放列表(播放请求){
到
public Response createPlaylist(字符串请求){
然后使用GSON将其转换为数据类
PlaylistRequest request = new Gson().fromJson(request, new TypeToken<PlaylistRequest >(){}.getType());
播放请求请求=new Gson().fromJson(请求,new TypeToken(){}.getType());
如果我理解正确,您的意思是想知道如何在邮递员中使用原始有效负载测试post方法?正确?如果是,您可以观看此视频:或者这里有明确的解释:如果我理解正确,您的意思是想知道如何在邮递员中使用原始有效负载测试post方法?正确?如果是的,你可以看这个视频:或者这里有明确的解释:他为什么需要这样做的可能重复?当jersey可以使用某个库将json映射到对象本身时?这只是另一种方式。对于rest API,GSON库对我来说是必须的:)他为什么需要这样做?当jersey可以使用某个库将json映射到对象本身时?这只是一个例子另一种方法。对于rest API GSON库,我必须这样做:)我已经尝试过了,但它返回500个内部服务器错误。500个内部服务器意味着您在代码中有一些问题,现在只需读取异常跟踪并查看代码中的问题。它返回了400个错误的请求。由于语法错误,请求无法实现。是否指定了cont标头中的ent类型?我已尝试此操作,但它返回500内部服务器错误。500内部服务器意味着您在代码中有一些问题,现在只需读取异常跟踪并查看代码中的问题。它返回400个错误请求。由于语法错误,请求无法完成。是否在标头中指定了内容类型?