我正在尝试通过jQuery POST将一些json数据发送到我本地机器中的jersey REST服务。
在我的服务器端,我有泽西方法来使用这个POST的JSON。
@Path("/question")
public class QuestionAPI {
private final static Logger LOGGER = Logger.getLogger(HelloWorldApi.class .getName());
@POST
@Path("/askquestion")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public TQARequest askquestion(TQARequest tqaRequest, @Context HttpServletRequest request) {
LOGGER.info("Inside-->askquestion-->TQARequest"+tqaRequest.getQuestion());
return tqaRequest;
}
}
我正在请求中包装json数据。所以在服务器中,我可以在该包装类中获取请求中发送的所有数据。我的请求包装类是
public class TQARequest {
private Question question;
public Question getQuestion() {
return question;
}
public void setQuestion(Question question) {
this.question = question;
}
@Override
public String toString() {
return "TQARequest [question=" + question + "]";
}
}
问题pojo类
public class Question {
@Id
private Long questionID;
private String questionText;
private long createdOn;
private String questionURL;
private String questionTrackingURL;
@Override
public String toString() {
return "Question [questionID=" + questionID + ", questionText="
+ questionText + ", createdOn=" + createdOn + ", questionURL="
+ questionURL + ", questionTrackingURL=" + questionTrackingURL
+ "]";
}
public Question(String questionText, long createdOn, String questionURL,
String questionTrackingURL) {
super();
this.questionText = questionText;
this.createdOn = createdOn;
this.questionURL = questionURL;
this.questionTrackingURL = questionTrackingURL;
}
public Long getQuestionID() {
return questionID;
}
public void setQuestionID(Long questionID) {
this.questionID = questionID;
}
public String getQuestionText() {
return questionText;
}
public void setQuestionText(String questionText) {
this.questionText = questionText;
}
public long getCreatedOn() {
return createdOn;
}
public void setCreatedOn(long createdOn) {
this.createdOn = createdOn;
}
public String getQuestionURL() {
return questionURL;
}
public void setQuestionURL(String questionURL) {
this.questionURL = questionURL;
}
public String getQuestionTrackingURL() {
return questionTrackingURL;
}
public void setQuestionTrackingURL(String questionTrackingURL) {
this.questionTrackingURL = questionTrackingURL;
}
public Question(){
}
}
每当我从jquery发出如下请求时,
function askQuestion(){
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/api/question/askquestion",
data:
JSON.stringify({
"tqaRequest" : {
"question" : {
"createdOn" : "sfddsf",
"questionText" : "fsdfsd",
"questionTrackingURL" : "http://www.google.com",
"questionURL" : "ssdf"
}
}
}
),
dataType: "json",
success: function(response){
console.log(response);
}
});
}
我在控制台中发现这个错误:
WARNING: /api/question/askquestion: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "tqaRequest" (Class com.netsquid.tqa.entity.TQARequest), not marked as ignorable
at [Source: org.mortbay.jetty.HttpParser$Input@899e3e; line: 1, column: 16] (through reference chain: com.netsquid.tqa.entity.TQARequest["tqaRequest"])
我可以通过从jQuery发送问题json并在方法中接受问题参数来解决这个问题。但是我需要将所有jQuery请求包装在TQARequest中,并将所有请求接受为TQARequest,然后从中提取问题对象。我该怎么做?
我在web.xml的POJO映射是:
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
希望这能解决问题。
@POST
@Path("/askquestion")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public TQARequest askquestion(String jsonRequest){
TQARequest tqaRequest = MapperUtil
.readAsObjectOf(TQARequest.class, jsonRequest);
}
MapperUtil。Java语言
com.fasterxml.jackson.databind.ObjectMapper MAPPER = new ObjectMapper();
public static <T> T readAsObjectOf(Class<T> clazz, String value)
throws MYPException {
try {
return MAPPER.readValue(value, clazz);
} catch (Exception e) {
LOGGER.error("{}, {}", e.getMessage(), e.fillInStackTrace());
}
}
我相信您可以将JSON文档简化如下:
{
"question" : {
"createdOn" : "sfddsf",
"questionText" : "fsdfsd",
"questionTrackingURL" : "http://www.google.com",
"questionURL" : "ssdf"
}
}
它仍然是这种形式的“tqaRequest”对象。
如果您想支持一系列问题,您的JSON可能如下所示(JSON数组放在方括号内):
{
"questions" : [
{
"createdOn" : "date 1",
"questionText" : "question 1",
"questionTrackingURL" : "http://www.google.com",
"questionURL" : "question 1 url"
},
{
"createdOn" : "date 2",
"questionText" : "question 2",
"questionTrackingURL" : "http://www.google.com",
"questionURL" : "question 2 url"
}]
}
}
您将调整您的TQARequest类以引用:
private List<Question> questions;
而不是
private Question question;
我想在灰熊上使用Guice泽西2.0。根据这个如何将guice-servlet与泽西2.0一起使用?讨论目前没有直接用于Jersey2的Guice集成,但可以使用HK2作为桥梁来实现。我还检查了Githubhttps://github.com/piersy/jersey2-guice-example-with-test中的示例项目。这个项目是使用Jetty实现的。 但我的问题是在Grizzly中实
首先,问题是当我从rest servlet调用ejb时,ejb总是null。 我在jersey spring 3.0.5中开发了一个rest web服务。以及用于服务的EJB3.1。 我已经在耳朵里打包了war和jar,所以我的应用程序看起来像(我使用maven作为依赖): 我想知道如何从war文件中的类调用jar文件中的服务。据我记忆,这是通过JNDI,我需要公开ejb apis?我应该怎么做?
问题内容: 谁能帮我解释为什么Java代码出现问题并一次性打印所有数据,而不是将每个数据块都作为javascript代码优先 Java代码: JavaScript :(打开页面http://jerseyexample- ravikant.rhcloud.com/rest/jws ,然后按F12并在控制台中运行以下内容,不允许其他域进行javascript调用) 编辑:只是为了帮助它也将正常的Jav
我需要在java上开发简单的web服务。我是java技术新手,根据几篇文章,我决定将JAX-RS(Jersey)与嵌入式http服务器(Grizzly2)结合使用,因为它看起来适合构建REST服务,部署似乎很简单。 在我的开发环境中,所有工作都很完美(使用IntllijIdea)。 但当我尝试在测试服务器上部署时,每个请求都返回“500内部错误”(偶数/application.wadl) 简单资源
如spring boot博客所述 我尝试自定义我的对象序列化。 在我的配置中添加了一个新的配置bean之后 当我尝试输出类用户的实例时,json结果不在CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES中 也许我需要在我的Jersey配置中注册一些东西来激活我的自定义obejctMapper配置 谢谢
问题内容: 我想使用Jersey来实现一些Java REST服务。默认的POJO转换器JAXB处理JSON对象有点奇怪,因此我想使用Jackson转换POJO的开销很少或更少。我如何告诉J2ME框架使用另一个转换器? 我的web.xml看起来像这样: 问题答案: 只需添加jackson JAR并修改web.xml即可,如下所示: 所需的Jackson Jackson JAR(http://jack