Frühjahr DTO Validierung im Service oder Controller?

Baue ich eine geradlinig-AJAX /JSON web service mit Spring. Der Allgemeine Datenfluß ist:

  some DTO from browser

            v

Spring @Controller method

            v

  Spring @Service method

Ich bin auf der Suche nach der einfachste Weg, um zu behandeln, Daten-Validierung.

  • Ich weiß, die @Valid Anmerkung, das funktioniert ziemlich gut drin @Controller Methoden.
  • Warum @Valid nicht Arbeit innerhalb @Service Methoden?

Ich meine: Eine service-Methode verwendet werden kann, von einem anderen Dienst und controller. So würde es nicht machen, viel mehr Sinn zu validieren am @Service Ebene?


Nehmen wir dieses einfache Beispiel:

MyDTO.java:

public class MyDTO {
   @NotNull
   public String required
   @Min(18)
   public int age;
}

MyServiceImpl.java:

public MyDomainObject foo(MyDTO myDTO) {
  //persist myDTO
  //and return created domain object
}

MyController.java:

@Autowired
MyService myService;

@Autowired     //some simple bean mapper like Dozer or Orika
Mapper mapper; //for converting domain objects to DTO

@RequestMapping(...)
public MyDomainObjectDTO doSomething(@RequestBody MyDTO myDTO) {
  mapper.map(myService.foo(myDTO), MyDomainObjectDTO.class);
}

Ist es gängige Praxis, dass der service-Methode erhält der DTO?

  • Wenn yes: Was ist die best practice, um zu überprüfen, dass DTO innerhalb der service-Methode?
  • Wenn no: Sollte vielleicht die Steuerung zu manipulieren, das Domain-Objekt und lassen Sie die service-speichern Sie das Objekt? (dies scheint ziemlich nutzlos für mich)

Meiner Meinung nach der Dienst sollte dafür verantwortlich sein, nur die Konsistenz der Daten.

Wie lösen Sie diese?

InformationsquelleAutor Benjamin M | 2013-09-30
Schreibe einen Kommentar