2016-11-30 8 views
8

Mam proste kontroler z obsługi GET, który akceptuje obiekt powiązać parametry żądanie:Jak powiązać żądania bez ustawiaczy?

@RestController 
@RequestMapping("/test") 
public class SampleController { 

    @GetMapping 
    public SomeResponse find(RequestParams params) { 
     // some code 
    } 

} 

RequestParams to prosta klasa POJO:

public class RequestParams { 

    private String param1; 
    private String param2; 

    // constructor, getter, and setters 

} 

Everthing działa dobrze, ale chciałbym pozbyć się ustawiaczy, aby obiekt był niezmienny do użytku publicznego. W metodzie modułu obsługi documentation dla @RequestMapping czytamy, że ewentualne argumenty ważne metody są:

poleceń lub tworzą przedmioty wiążą parametry żądania do właściwości fasoli (przez ustawiaczy) lub bezpośrednio do pól

Czy można w jakiś sposób przesłonić domyślną konfigurację Spring Boot, aby parametry żądania były powiązane z właściwościami klasy za pomocą odbicia, a nie z ustawiaczami?

Odpowiedz

0

Nie sądzę, że musisz zmienić konfigurację podczas startu wiosennego. Wygląda na to, że pojemnik ze sprężyną próbuje ustawić wartości za pomocą ustawiacza, jeśli jest dostępny, w przeciwnym razie używa bezpośrednio pola. Czy możesz spróbować zmienić zakres swoich obiektów w klasie RequestParam na publiczny.

public class RequestParams { 

    public String param1; 
    public String param2; 

    // constructor, getter, and setters 

} 

Nie użyłem czegoś takiego, ale wygląda na to, że powinno działać. Daj nam znać, co się stało.

+0

Niestety, jeśli zakres pól zostanie zmieniony na "publiczny", a setery zostaną usunięte, parametry żądania nie są powiązane z obiektem. Nawet jeśli moim celem jest utrzymanie obiektu niezmiennie, przynajmniej do użytku publicznego, a więc upublicznienie pól tylko pogorszyłoby sytuację. –

1

biblioteki Wiosna startowe zależą Jackson (spring-boot-starter-web < - spring-boot-starter-json < - jackson libraries), więc można korzystać z jego adnotacje kontrolować powiązania JSON.

@JsonCreator -annotated konstruktorzy lub metody statyczne pozwalają wystąpień obiektów bez wyraźnych ustawiaczy:

@JsonCreator 
public RequestParams(@JsonProperty("param1") String param1, 
        @JsonProperty("param2") String param2) { 
    this.param1 = param1; 
    this.param2 = param2; 
} 

Dokumentacja

Powiązane problemy