wake-up-neo.com

JSON-Post an Spring Controller

Hallo, ich fange im Frühling mit Web Services an, daher versuche ich, eine kleine Anwendung in Spring + JSON + Hibernate zu entwickeln. Ich habe ein Problem mit HTTP-POST. Ich habe eine Methode erstellt:

@RequestMapping(value="/workers/addNewWorker", method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
@ResponseBody
public String addNewWorker(@RequestBody Test test) throws Exception {
    String name = test.name;
    return name;
}

Und mein Modelltest sieht so aus:

public class Test implements Serializable {

private static final long serialVersionUID = -1764970284520387975L;
public String name;

public Test() {
}
}

Mit POSTMAN sende ich einfach JSON {"name": "testName"} und ich bekomme immer eine Fehlermeldung;

The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

Ich habe Jackson Bibliothek importiert. Meine GET-Methoden funktionieren gut. Ich weiß nicht, was ich falsch mache. Für Anregungen bin ich dankbar.

11
user2239655

Konvertieren Sie Ihr JSON-Objekt mit JSON-String 

JSON.stringify ({"name": "testName"})  

oder manuell. @RequestBody erwartet Json-String anstelle des Json-Objekts.

Hinweis: Die Funktion stringify hat Probleme mit einigen IE - Versionen, Firefox wird jedoch funktionieren

Überprüfen Sie die Syntax Ihrer Ajax-Anforderung für die Anforderung POST. processData: false Eigenschaft ist in einer Ajax-Anforderung erforderlich

$.ajax({ 
    url:urlName,
    type:"POST", 
    contentType: "application/json; charset=utf-8",
    data: jsonString, //Stringified Json Object
    async: false,    //Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation
    cache: false,    //This will force requested pages not to be cached by the browser  
     processData:false, //To avoid making query String instead of JSON
     success: function(resposeJsonObject){
        // Success Action
    }
});

Controller

@RequestMapping(value = urlPattern , method = RequestMethod.POST)

public @ResponseBody Test addNewWorker(@RequestBody Test jsonString) {

    //do business logic
    return test;
}

@RequestBody -Covert Json-Objekt in Java

@ResponseBody - Java-Objekt in Json konvertieren

23

Verwenden Sie stattdessen application/*. Und verwenden Sie JSON.maybeJson (), um die Datenstruktur im Controller zu überprüfen.

0
Vin Tsie

Sie müssen die Getter und Setter für alle Felder angeben, die in der Test-Klasse des Modells definiert wurden.

public class Test implements Serializable {

    private static final long serialVersionUID = -1764970284520387975L;

    public String name;

    public Test() {

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
0
Ameya Pandilwar

Führen Sie die folgenden Schritte aus, wenn Sie json als http-Anfrage und -Antwort verwenden möchten. Daher müssen wir Änderungen in [context] .xml vornehmen

<!-- Configure to plugin JSON as request and response in method handler -->
<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <beans:property name="messageConverters">
        <beans:list>
            <beans:ref bean="jsonMessageConverter"/>
        </beans:list>
    </beans:property>
</beans:bean>
<!-- Configure bean to convert JSON to POJO and vice versa -->
<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</beans:bean>   

MappingJackson2HttpMessageConverter auf die RequestMappingHandlerAdapter-MessageConverters, sodass die Jackson-API JSON in Java-Beans konvertiert und konvertiert. Durch diese Konfiguration werden wir JSON im Anforderungshauptteil verwenden und in der Antwort JSON-Daten erhalten.

Ich biete auch ein kleines Code-Snippet für den Controller-Teil an:

    @RequestMapping(value = EmpRestURIConstants.DUMMY_EMP, method = RequestMethod.GET)

    public @ResponseBody Employee getDummyEmployee() {
    logger.info("Start getDummyEmployee");
    Employee emp = new Employee();
    emp.setId(9999);
    emp.setName("Dummy");
    emp.setCreatedDate(new Date());
    empData.put(9999, emp);
    return emp;
}

Im obigen Code wird das emp-Objekt daher als Antwort direkt in json konvertiert. Dasselbe wird auch für den Post passieren. 

0
Aman Goel