【问题标题】:Internal Server Error with POST using XML on Postman在 Postman 上使用 XML 进行 POST 的内部服务器错误
【发布时间】:2021-08-23 22:56:14
【问题描述】:

我遇到了一个问题,我挣扎了 5 个小时。 我已经使用 Jersey 在 Eclipse 中创建了一个 Java API(现在仅用于测试),这是我第一次创建 API。

我正在使用 Postman 进行测试。

当调用 GET 方法只返回一个字符串“Hello”时,它工作得很好。

问题是当我尝试接受 Person 类的对象作为输入参数并且只返回字符串“Hello”的 POST 方法时,我得到内部服务器错误。我知道我现在没有使用 Person 对象,但我只是在测试 Postman 的输入参数并且它不起作用。 我试图将 API 中的函数更改为没有输入参数而只是 POST,它的工作原理就是这样,它会打印“Hello”,但我需要那个输入参数以备后用...... 问题可能是在 Postman 的 xml 代码中创建对象的某个地方,我不知道。 欢迎提出任何建议。

这里是 API 的代码,其中包含 get 和 post 方法

@Path("/employee")
public class API {
    
        @POST
        @Consumes(MediaType.APPLICATION_XML)
        @Produces(MediaType.APPLICATION_XML)
        @Path("/examplepost")
        public String examplePost(Person p) {
            return "Hello";
        }
        
        @GET
        @Consumes(MediaType.APPLICATION_XML)
        @Produces(MediaType.APPLICATION_XML)
        @Path("/exampleget")
        public String exampleGet() {
            return "Hello";
        }
}

这是 Person 类:

@XmlRootElement(name = "person")
public class Person {
    private String name;
    private int age;
    private int id;

    public Person(String name, int age, int id) {
        super();
        this.name = name;
        this.age = age;
        this.id = id;
    }
    
    public Person() {
        super();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    
    @Override
    public String toString(){
        return id+"::"+name+"::"+age;
    }

}

这些是 Postman 的结果

GET Method

POST Method

【问题讨论】:

  • 尝试在 post 方法参数中添加@RequestBody:public String examplePost(@RequestBody Person p)
  • @aang13 我尝试这样做,但我收到错误“RequestBody 无法解析为类型”,并且没有导入它
  • 尝试导入这个import org.springframework.web.bind.annotation.RequestBody;
  • @aang13 也没有解决,我没有在我的项目中使用 Spring,我从未使用过 Spring,我只是从我在 yt 上找到的教程中获得了 Jersey,但显然他们没有这个问题。
  • 你能检查你的日志中是否有任何带有单词 JAXBContext 的警告。

标签: java api post jersey postman


【解决方案1】:

问题在于参数Person p 没有正确的类类型。该函数正在使用 XML 而不是 Person 的实例。所以你必须使用JAXBElement 来表示有关 Xml 元素的信息

public String examplePost(JAXBElement<Person> p) {
        Person person = p.getValue();
        return "Hello";
}

[可选] 同样在 PostMan 中:您必须通过在开头添加 xml 版本来指定要发送的数据

<?xml version="1.0"?>
<Person>
    <!-- Person's attributes -->
</Person>

【讨论】:

  • 这绝对不是必需的。如果一切正确,则允许人
  • 谢谢,我使用 Spring Boot 和 @RequestBody 解决了我的问题,一切都很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 2020-01-18
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
相关资源
最近更新 更多