#web-services #spring-mvc #jsonp
#веб-сервисы #spring-mvc #jsonp
Вопрос:
Я создал простой запрос JSON-запроса к веб-сервису spring на основе аннотаций, столкнувшийся с проблемой в методе веб-сервиса, не способный отменить привязку к запросу json к объекту java с использованием jackson.
ниже приведен код, который я написал. пожалуйста, помогите мне в исправлении проблемы.
Заранее спасибо!!
—Запрос JSON
var client = {
"clientId":$('#client_id').val(),
"firstName":$('#first_name').val(),
"lastName":$('#last_name').val(),
"companyName":$("#company_name").val(),
"fileNo":$("#file_no").val(),
"resiAddr1":$("#resi_addr1").val(),
"resiAddr2":$("#resi_addr2").val(),
"resiAddr3":$("#resi_addr3").val(),
"city":$("#city").val(),
"pinCode":$("#pin_code").val(),
"mobileNo1":$("#mobile1").val(),
"mobileNo2":$("#mobile2").val(),
"mobileNo3":$("#mobile3").val()
};
var jsonReqString = JSON.stringify(client, function(key, value) {
if (typeof value == "number")
return value;
if (typeof value == "boolean")
return value;
return value == "" ? null : value;
});
alert('create request ' jsonReqString);
$.ajax( {
url: "/Spring3Hibernate4Annotation/service/create",
type: "POST",
data: jsonReqString,
dataType: "jsonp",
jsonp: "cspcb",
contentType: "application/json",
timeout: 60000,
xhrFields: {
withCredentials: false
},
beforeSend: function(xhrObj){
},
success: function(retdata){
alert("retdata = " retdata);
var retdata_string = JSON.stringify(retdata, function(key, value) {
if (typeof value == "number")
return value;
if (typeof value == "boolean")
return value;
if (typeof value === "string")
{
value = $.trim(value);
}
if (key == 'clientId' amp;amp; value== "")
return "123321";
return value == "" ? "Rajiv" : value;
});
var Objs = jQuery.parseJSON(retdata_string);
alert(Objs);
console.log("retdata_string data=" retdata_string);
},
error : function(jqXHR, textStatus, errorThrown) {
alert(
"Errror"
textStatus, errorThrown);
}
});
});
—Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring/applicationContext.xml, classpath:/spring/hibernateContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>JSON-P Callback Filter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>jsonpCallbackFilter</param-value>
</init-param>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>JSON-P Callback Filter</filter-name>
<url-pattern>/service/*</url-pattern>
</filter-mapping>
</web-app>
—ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.project"/>
<context:annotation-config />
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
<property name="objectMapper">
<bean class="com.project.wrapper.CustomObjectMapper"/>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="jsonpCallbackFilter" class="com.project.wrapper.JsonpCallbackFilter" />
<mvc:resources mapping="/resources/**" location="/, classpath:/resources" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
—Controller.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.project.entity.Client;
import com.project.service.GenericService;
@Controller
public class ClientController {
@Autowired
GenericService genericService;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String showClientForm(Model model) {
model.addAttribute("client",new Client());
return "index";
}
@RequestMapping(value = "/service/create", method = RequestMethod.POST)
public @ResponseBody Client saveClient(@RequestBody Client client) {
Client existing = genericService.findByClientName(client.getClientId());
if (existing != null) {
return existing;
}
genericService.saveClient(client);
return client;
}
Комментарии:
1. Похоже, что ваши значения полей json типа string не заключены в кавычки («) вокруг них
2. Вот мой запрос JSON: я не вижу никаких проблем, а также проверен с помощью онлайн-валидатора, и он показывает действительный JSON.{ «ClientID»: null, «FirstName»: «test», «LastName»: «new», «CompanyName»: «comp», «city»: null, «pinCode»: null }
3. Вот мой запрос JSON: я не вижу никаких проблем, а также проверен с помощью онлайн-валидатора, и он показывает действительный JSON.
4. Вот мой запрос JSON: я не вижу никаких проблем, а также проверен с помощью онлайн-валидатора, и он показывает действительный JSON.