【问题标题】:How do i create a POST request using jax -rs如何使用 jax -rs 创建 POST 请求
【发布时间】:2023-03-09 01:38:02
【问题描述】:

我有两个类 PlaylistResource,它们有一个方法 createPlaylist,它采用 PlaylistRequest 类型的对象。我想在 localhost:9999/playlists 上创建一个 POST 请求我正在使用 Postman,但我不确定如何将作为请求的 PlaylistRequest 对象传递给方法 createPlaylist。

@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;
    }
}

另一个类:

@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()));
        }
    }

}

【问题讨论】:

标签: java json rest web-services jax-rs


【解决方案1】:

把这个参数从数据类改成字符串,

public Response createPlaylist(PlaylistRequest request) {

public Response createPlaylist(String request) {

然后使用 GSON 将其转换为您的数据类。

PlaylistRequest request = new Gson().fromJson(request, new TypeToken<PlaylistRequest >(){}.getType());

【讨论】:

  • 他为什么要这么做? jersey 什么时候可以使用一些库将 json 映射到对象本身?
  • 这只是另一种方式。休息 API GSON 库对我来说是必须的 :)
【解决方案2】:

只需在请求的Body 中添加一个JSON 对象,在Postman 中选择Raw Json 并粘贴以下对象:

注意:在Request的Header中添加一个键Content-Type并将其值设置为application/json

{
  "title": "Some title",
  "artistSeeds": [
    "string1",
    "string2"
  ],
  "numberOfSongs": 0
}

标题 身体

【讨论】:

  • 我试过了,但它返回 500 内部服务器错误。
  • 500 内部服务器意味着您的代码有问题,现在只需阅读异常跟踪,看看代码有什么问题
  • 它正在返回 400 错误请求。由于语法错误,请求无法完成。
  • 您是否在标题中指定了内容类型?
猜你喜欢
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 2016-09-26
  • 2019-04-13
  • 1970-01-01
相关资源
最近更新 更多