Am mit Java 1.7, Resteasy und Codehaus Version von Jackson (für JSON Parsen) ...Zurück Jackson basierend JSON ist das Hinzufügen zusätzliche Schrägstriche in Nutzlast
einen Standard-Java-POJO DTO haben, die einen Verzeichnispfad auffüllt (als ein String), basierend auf einem Windows 7-Dateisystem:
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
}
Dies ist die Schicht, die meine Geschäftslogik auftritt ... es den Wert von einer Einheit aus einer Datenbank erhält und setzt die Eigenschaft in der 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;
}
}
Aus meiner log.debug() nennt es wie folgt aussieht (was der richtige String ist, dass ich will):
Entity.getBackupDir: "\\my-network-folder\backupDir"
dto.getBackupDirectory: \\my-network-folder\backupDir"
Hier ist der RESTful Web Service Aufruf:
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;
}
}
Die tatsächliche JSON Nutzlast erzeugt aus dem RESTful Web Service Aufruf sieht wie folgt aus:
{"id": 1, "backup-dir": "\\\\my-network-folder\\backupDir"}
Warum ist es Hinzufügen eines zusätzlichen Schrägstriche?
Mein 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>
die Apache Commons Bibliothek wie diese versucht, mit (im DirectoryRepository.getDirectoryById(Long id)
-Methode):
dto.setBackupDir(FilenameUtils.separatorsToUnix(entity.getBackupDirectory()));
dto.setBackupDir(FilenameUtils.separatorsToSystem(entity.getBackDirectory()));
dto.setBackupDir(FilenameUtils.separatorsToWindows(entity.getBackDirectory()));
Die einzige, die nicht die zusätzlichen Schrägstriche enthält ist (aber ich brauche das für die Windows-Konvention):
FilenameUtils.separatorsToUnix();
Auch versucht mit @JS onRawValue in meiner eigentlichen Klasse Web-Service:
@JsonRawValue
@JsonProperty("backup-dir")
private String backupDir;
Dieser brach tatsächlich eine Menge Dinge ...
sind die neu hinzugefügte ein Ergebnis in der Web-Services-Schicht oder Repository-Schicht schlitzt?
Wie kann ich es Windows-spezifischer machen?
Was ich meine JSON Nutzlast aussehen soll, ist dies:
{"id": 1, "backup-dir": "\\my-network-folder\backupDir"}
Danke, dass Sie sich die Zeit nehmen, diese zu lesen ...