Pac*_*ver 0 java rest resteasy jackson java-7
我使用的是Java 1.7,RestEasy和Jackson的codehaus版本(用于JSON解析)......
有一个标准的Java POJO DTO,它基于Windows 7文件系统填充目录路径(作为String):
import org.codehaus.jackson.annotate.JsonProperty;
public class BackupDirDTO implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("id")
private Long id;
@JsonProperty("backup-dir")
private String backupDir;
// Getters & Setters
}
Run Code Online (Sandbox Code Playgroud)
这是我的业务逻辑发生的层...它从数据库中获取实体的值并在DTO中设置属性:
public class DirectoryRepository {
public BackupDirDTO getDirectoryById(Long id) throws Exception {
DirectoryEntity entity = directoryRespository.getEntityById(id);
BackupDirDTO dto = new BackupDirDTO();
log.debug("Entity.getBackupDir: " + enity.getBackupDirectory());
dto.setBackupDir(entity.getBackupDirectory());
log.debug("dto.getBackupDirectory: " + dto.getBackupDir());
return dto;
}
}
Run Code Online (Sandbox Code Playgroud)
从我的log.debug()调用它看起来像这样(这是我想要的正确的字符串):
Entity.getBackupDir: "\\my-network-folder\backupDir"
dto.getBackupDirectory: \\my-network-folder\backupDir"
Run Code Online (Sandbox Code Playgroud)
这是RESTful Web服务调用:
public class DirectoryResource {
private DirectoryRepository repository;
@GET
@Path("/directories/{id}")
@Produces(MediaType.APPLICATION_JSON)
public BackupDirDTO getDirectoryById(@PathParam("id") Long id) {
BackupDirDTO dto = new BackupDirDTO();
try {
dto = repository.getDirectoryById(id);
} catch (Exception e) {
e.printStackTrace();
}
return dto;
}
}
Run Code Online (Sandbox Code Playgroud)
从RESTful Web Service调用生成的实际JSON有效负载如下所示:
{"id": 1, "backup-dir": "\\\\my-network-folder\\backupDir"}
Run Code Online (Sandbox Code Playgroud)
为什么要添加额外的斜杠?
我的pom.xml
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.ws.rs</groupId>
<artifactId>jboss-jaxrs-api_1.1_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jdk-http</artifactId>
<version>2.3.10.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.10.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
尝试使用这样的Apache Commons库(在DirectoryRepository.getDirectoryById(Long id)方法内):
dto.setBackupDir(FilenameUtils.separatorsToUnix(entity.getBackupDirectory()));
dto.setBackupDir(FilenameUtils.separatorsToSystem(entity.getBackDirectory()));
dto.setBackupDir(FilenameUtils.separatorsToWindows(entity.getBackDirectory()));
Run Code Online (Sandbox Code Playgroud)
唯一一个不包含额外斜杠的是(但我需要一个用于Windows约定):
FilenameUtils.separatorsToUnix();
Run Code Online (Sandbox Code Playgroud)
甚至尝试在我的实际Web服务类中使用@JSonRawValue:
@JsonRawValue
@JsonProperty("backup-dir")
private String backupDir;
Run Code Online (Sandbox Code Playgroud)
这实际上打破了很多东西......
新添加的斜杠是Web服务层或存储库层中的结果吗?
如何使其更具特定于Windows?
我希望我的JSON有效负载看起来像这样:
{"id": 1, "backup-dir": "\\my-network-folder\backupDir"}
Run Code Online (Sandbox Code Playgroud)
感谢您抽出时间来阅读...
| 归档时间: |
|
| 查看次数: |
666 次 |
| 最近记录: |