2017-05-01 1 views
1

Ich brauche einen Rat. Ich bin nicht gut in Spring Framework und ich möchte Ihnen nur eine einfache Frage stellen.Wie kann ich Objekt nur durch 1 Feld unter @RequestBody Annotation abrufen?

Ich habe ein nächstes POJO Objekt auf der Seite Server:

@Entity 
@Table(name = "AutoRate") 
public class AutoService { 

    public AutoService() { 
    } 

    @Id 
    @GeneratedValue(generator = "increment") 
    @GenericGenerator(name = "increment", strategy = "increment") 
    private long id; 

    @Column(name = "serviceName", nullable = false) 
    private String serviceName; 

    @Column(name = "imageURL", nullable = false) 
    private String imageURL; 

    @Column(name = "mapCoordinate", nullable = false) 
    private String mapCoordinate; 

    @Column(name = "websiteURL", nullable = false) 
    private String websiteURL; 

    @Column(name = "phoneNumber", nullable = false) 
    private String phoneNumber; 

    @JsonManagedReference 
    @OneToMany(mappedBy = "autoService", fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) 
    private List<Service> services = new ArrayList<Service>();} 

Es alle Getter und Setter enthält; Ich möchte nur Platz sparen.

Weiter: Ich möchte 1 Objekt aus der Datenbank für den Client abrufen, und ich möchte dies nur mit serviceName Variable in der Datenbank tun.

Ich habe eine nächste Controller-Methode:

@RequestMapping(value = "/getAutoService", method = RequestMethod.GET) 
    @ResponseBody 
    public AutoService getAutoService(@RequestBody String serviceName){ 
     AutoService autoService = dataBaseService.getByName(serviceName); 
     return autoService; 
    } 

Nach Aufruf von Client mir nächsten Fehler:

117899 [http-apr-8080-exec-1] WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.webserverconfig.user.entity.AutoService com.webserverconfig.user.controller.ServiceController.getAutoService(com.webserverconfig.user.entity.AutoService) 

Ich denke, dass ich @RequestBody Anmerkung falsch verwenden.

Kann jemand einen Rat geben?

Antwort

2

Sie verwenden die GET-Methode, die ihre Daten in der Abfragezeichenfolge und nicht innerhalb des HTTP-Body weiterleitet. Die POST-Methode übergibt die HTTP-Nachricht in ihrem Hauptteil.

Daher ist es nicht richtig @RequestBody Annotation zu verwenden, versuchen Sie stattdessen @PathVariable zu verwenden.

@RequestBody Annotation zeigt an, dass Sie versuchen, Daten in einer HTTP-Nachricht an den Methodenparameter zu binden.

+0

Danke für die Antwort. Ich werde es ausprobieren. – Andrew

+0

Ist meine Antwort Ihnen geholfen? Hat es dein Problem gelöst? @Andrew –

Verwandte Themen