gpt4 book ai didi

java - 在 Jersey 中使用 JAXB 解析 JSON

转载 作者:行者123 更新时间:2023-11-30 04:10:15 25 4
gpt4 key购买 nike

我正在尝试使用 Jersey 创建一个非常简单的 RESTful Web 服务。我正在尝试使用 JAXB 来使用并生成 JSON。问题是当我向它传递 JSON 时出现错误。

下面是资源代码。 status() 和 echo() 都工作正常。请注意,在 processRequest() 上,我当前正在生成文本响应,但稍后会更改为生成 JSON。

package web_service;

import javax.ws.rs.*;
import javax.ws.rs.core.*;

@Path("/")
public class WebService {

@GET
@Produces(MediaType.TEXT_PLAIN)
public String status() {
return "Web service is up and running.";
}

@POST
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
public String echo(String consumed) {
return consumed;
}

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String processRequest(JAXBElement<Request> r) {
Request request = r.getValue();
return "Latitude: " + request.latitude +
"\n:Longitude: " + request.longitude;
}
}

这是请求模型:

package web_service;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Request {

public String latitude;
public String longitude;

public Request() {}

public Request(String latitude, String longitude) {
this.latitude = latitude;
this.longitude = longitude;
}

// Getters and setters for both
}

我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"
version="2.5">

<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>web_service</param-value>
</init-param>

<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

最后,这是我正在执行的 POST 示例( header 设置为“Content-Type: application/json”);

{
"latitude":"25.764084501106787",
"longitude":"-80.37422332275389"
}

当我运行此命令时,Tomcat 给出以下异常:

WARNING: WebApplicationException cause:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=class web_service.Request, genericType=class web_service.Request.

我得到以下回复:

415 Unsupported Media Type

Content-Length: 1 kB
Content-Type: text/html;charset=utf-8
Date: 2013 Nov 4 17:41:20
Server: Apache-Coyote/1.1

enter image description here

我对此很陌生,这没有多大意义。希望你们中的一个人能够帮助我。谢谢!

最佳答案

将其添加到您的 web.xml

<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>

有关更多详细信息,请参阅 Jersey 文档:https://jersey.java.net/documentation/1.18/json.html

关于java - 在 Jersey 中使用 JAXB 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com