CustomObjectResource-rest服务返回一个简单的POJO,其中包含文本、长日期和本地日期时间字段。
@Component
@Path("/resource")
public class CustomObjectResource {
private RandomCOBuilder randomCOBuilder = new RandomCOBuilder();
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getCustomObject(@Context HttpServletRequest httpRequest) {
String acceptHeader = httpRequest.getHeader("Accept");//I do not use it in the code. When I debug, this param is correct.
CustomObject customObject = randomCOBuilder.get();
return Response
// Set the status and Put your entity here.
.ok(customObject)
// Add the Content-Type header to tell Jersey which format it should marshall the entity into.
.build();
}
}
这是我的邮差。第-1部分接受=json状态码为200,JSON解析失败。实际上,返回的对象是XML。当我选择以XML显示结果时,
<customObject>
<id>5</id>
<text>CustomObject_5</text>
<timestamp>2017-08-07 17:17:40</timestamp>
</customObject>
现在,我使用Accept:application/xml
第2部分接受xml
它没有返回任何内容:404。
我和杰克逊一起使用SpringBoot。
这是我的gradle。建筑
group 'com.ca.training.rest'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile "org.springframework.boot:spring-boot-starter-jetty:1.5.3.RELEASE"
compile "org.springframework.boot:spring-boot-starter-web:1.5.3.RELEASE"
compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.8.8"
compile "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.8.8"
compile 'javax.ws.rs:javax.ws.rs-api:2.0.1'
compile "org.springframework.boot:spring-boot-starter-jersey:1.5.3.RELEASE"
testCompile 'junit:junit:4.12'
}
CustomObject
@XmlRootElement(name = "customObject")
@JsonRootName(value = "customObject")
public class CustomObject {
private Long id;
private String text;
@JsonFormat(pattern = DATE_FORMAT)
@XmlJavaTypeAdapter(DateTimeAdapter.class)
private LocalDateTime timestamp;
}
我正在调试。在我的代码中一切正常...但是当我进一步调试时:
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
Class has two properties of the same name "timestamp"
this problem is related to the following location:
at public java.time.LocalDateTime com.ca.training.rest.example.core.entity.CustomObject.getTimestamp()
at com.ca.training.rest.example.core.entity.CustomObject
this problem is related to the following location:
at private java.time.LocalDateTime com.ca.training.rest.example.core.entity.CustomObject.timestamp
at com.ca.training.rest.example.core.entity.CustomObject
这就是解决方案。
1)@XmlAccessorType(XmlAccessType. FIELD)
以摆脱错误。否则它会从字段和getter中获取属性。
@XmlRootElement(name = "customObject")
@JsonRootName(value = "customObject")
@XmlAccessorType(XmlAccessType.FIELD)
public class CustomObject {
private Long id;
private String text;
@JsonFormat(pattern = DATE_FORMAT)
@XmlJavaTypeAdapter(DateTimeAdapter.class)
private LocalDateTime timestamp;
//Getters and setters
}
2) 在JerseyConfig中添加Jackson配置
@Component
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
registerEndpoints();
}
private void registerEndpoints() {
register(CustomObjectResource.class);
register(JacksonConfig.class);//I need this
}
}
3)和杰克逊配置
@Provider
public class JacksonConfig implements ContextResolver<ObjectMapper> {
private ObjectMapper objectMapper = objectMapper();
private ObjectMapper objectMapper() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
objectMapper = builder.build();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
return objectMapper;
}
@Override
public ObjectMapper getContext(Class<?> type) {
return objectMapper;
}
}
现在它可以工作并以XML和JSON返回对象。
接受:应用程序/xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customObject>
<id>2</id>
<text>CustomObject_2</text>
<timestamp>2017-08-08 11:49:47</timestamp>
</customObject>
接受:应用程序/json
{
"customObject": {
"id": 3,
"text": "CustomObject_3",
"timestamp": "2017-08-08 11:50:25"
}
}
我似乎得到了错误的哈希值通过我的webSocket键。据我所知,套接字的客户端工作,因为当我让它连接到其他服务器时,它是成功的。 指数js 指数html 运行时密钥和哈希对的示例如下: PxsrStN1CGLK/JBYydUFjg== QAK TE6u sV705GI LpP4yKM04Y= 顶部是浏览器给出的键,底部是getAVal函数返回的值,它是不正确的,导致此消息。 WebSocket握手
问题内容: 如何将Webmethod的值以JSON格式返回给客户端? 我要返回两个静态int值。 我是否需要使用这两个属性创建新对象并返回它? GetStatus()方法经常被调用,我不喜欢每次仅用于json格式创建一个特殊对象的想法。 在客户端,我在捕获返回值: 问题答案: 我只想带一个物体。它符合您的需求。如果您有两个返回值,则必须以结构化的方式将它们放在一起。
问题内容: 请求中的accept-language标头通常是一个很长的复杂字符串- 例如。 有没有一种简单的方法可以在Java中解析它?还是可以帮助我做到这一点的API? 问题答案: 我建议使用让容器解析“接受语言”,而不是尝试自己管理复杂性。
我很难强制S3在它从一个bucket返回的所有对象上设置CORS头,尽管启用了CORS,但由于客户端S3上传正在工作,返回的对象没有CORS头! 我启用的策略是: 对象URL示例https://s3.amazonaws.com/captionable/meme/test 有人知道怎么了吗?
我是新来表达,目前如果我想发送一个回应,我会这样做 对于我所有的控制器函数,我会这样做。我想这是一种压倒性的,所以我在想是否有可能制作一个广义版本的响应。 所以经过一些搜索,我发现有两种方法可以实现这一点: 我找到了这个答案。这很清楚,但我认为这是浪费时间,我的控制器不够可读,我必须在每个控制器函数中做以下事情 这是非常有希望的,但不幸的是,经过这么多次尝试和遵循express docs,我无法让
问题内容: 我正在尝试返回刚刚用Gremlin创建的Vertex(tinkerpop格式): 我得到这个例外… 如何更改代码,使其以gremlin.structure.Vertex格式而不是DSE Graph Vertex格式返回? 我在用: 我希望可以做到这一点,否则从TitanDB进行迁移将很痛苦。 问题答案: 根据我通过jira和电子邮件与Datastax Team进行的冗长讨论, 确实可以