【问题标题】:The request entity cannot be empty请求实体不能为空
【发布时间】:2017-03-20 19:18:17
【问题描述】:

我是 Jax-RS 的新手。我正在尝试使用实现一个简单的 GET 方法 球衣。我得到了 Collection 资源的正确输出, 但我收到 "ERROR 400 Bad Request" 例如资源。一世 我被困在这一点上。一切似乎都是正确的,但我是 错过了一些我无法弄清楚的东西。我已经 尝试了过去 10 天。任何帮助都将是可观的。请找到 我的代码在下面。我正在使用正在抛出的 POSTMAN 休息客户端 “意外的'T'”作为响应,ARC 抛出“请求实体 不能为空。”两者都是错误 400 错误请求。

这是我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>MessangerWithoutMaven</display-name>
    <welcome-file-list>

        <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.manish.jax_rs.Messanger</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>

这是我的 MessageResource.java :

package com.manish.jax_rs.Messanger.resources;

import java.util.List;

import javax.websocket.server.PathParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.manish.jax_rs.Messanger.model.Message;
import com.manish.jax_rs.Messanger.service.MessageService;

@Path("/messages")
public class MessageResource {

    MessageService messageService = new MessageService();
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Message> getMessages(){

        return messageService.getAllMessages();
    }

    @GET
    @Path("/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Message getMessage(@PathParam("id") int id){


        return messageService.getMessage(id);
    }

}

这是 DaoClass.java:

package com.manish.jax_rs.Messanger.Dao;

import java.util.HashMap;
import java.util.Map;

import com.manish.jax_rs.Messanger.model.Message;


public class DaoClass {


    private static Map<Integer,Message> messages = new HashMap<Integer,Message>();


    public static Map<Integer, Message> getMessages() {
        return messages;
    }
}

这是 MessageService.java:

package com.manish.jax_rs.Messanger.service;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;

    import com.manish.jax_rs.Messanger.Dao.DaoClass;
    import com.manish.jax_rs.Messanger.model.Message;

    public class MessageService {

        private Map<Integer,Message> messages= DaoClass.getMessages();

        Message m1= new Message(1,"Hello John","John");
        Message m2=  new Message(2,"Hello Mathews","Mathews");
        Message m3= new Message(3,"Hello Albert","Albert");

        public MessageService(){
            messages.put(1,m1);
            messages.put(2,m2);
            messages.put(3, m3);
        }
        public List<Message> getAllMessages(){
            return new ArrayList<Message>(messages.values());
        }
        public Message getMessage(int id){
            return messages.get(id);
        }
    }

这是 Message.java:

package com.manish.jax_rs.Messanger.model;

import java.util.Date;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Message {

    private int id;
    private String message;
    //private Date created;
    private String author;

    public Message() {

    }
    public Message(int id, String message, String author) {

        this.id = id;
        this.message = message;
        this.author = author;
        //this.created = new Date();
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }

    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}



[List of jars][1]




[correct output for collection resource "messages" in Postman rest client][2]


[Incorrect output for instance resource /messages/1][3]enter code here


  [1]: https://i.stack.imgur.com/sWfMl.jpg
  [2]: https://i.stack.imgur.com/y5Nnf.jpg
  [3]: https://i.stack.imgur.com/8CwId.jpg

【问题讨论】:

    标签: web-services jakarta-ee jersey jax-rs http-status-code-400


    【解决方案1】:

    请检查您的 PathParam 导入。 而不是“javax.websocket.server.PathParam;”使用“导入 javax.ws.rs.PathParam;”。 这应该可以正常工作。

    【讨论】:

    • 您能否详细说明为什么此更改可以解决问题?
    • 答案应该很详细,请更新你的答案
    • 我真的找不到问题所在。刚刚将同一个项目导入 STS,它就像魅力一样工作。
    【解决方案2】:

    你已经导入了 import javax.websocket.server.PathParam;应该是 import javax.ws.rs.PathParam;

    【讨论】:

    • 这只是另一个答案的副本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多