我已经在 here 上询问过如何使用 Spring MVC 重新加载 JSP 页面的特定部分。 .
我需要使用 AJAX 将一个值传递给我的 Controller ,但这并没有真正起作用。但我可以在没有 JSON 的情况下解决它。
我想要什么?
我希望能够将这个确切的值作为 JSON 字符串传递,因为无论如何我都需要让 JSON 为进一步的功能工作,而且我很好奇为什么它不适合我。
目前我收到错误:415(不支持的媒体类型)。
我的代码:
MainController.java
@RestController
public class MainController {
// Delivers the refresh-information for the ajax request, when the detail view gets reloaded
@RequestMapping(value = "/refreshDetail", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.TEXT_HTML_VALUE)
private ModelAndView refreshDetailView(@RequestBody IdObject id, ModelMap model){
DetailViewBean dvb = Dao.getDetailViewData(id.getId());
model.addAttribute("detailSearchResultPerson", SupportMethods.getDetailViewDataRecordsPerson(dvb));
model.addAttribute("detailSearchResultCompany", SupportMethods.getDetailViewDataRecordsCompany(dvb));
/*
getDetailViewDataRecords: Array of single Data Records (Label & Data)
getDetailViewData: Bean with fetched Data from the DB
*/
return new ModelAndView("detailView", model);
}
}
main.js(ajax请求)
$.ajax({
type: "POST",
accept:"text/html",
contentType: "json/application;charset=UTF-8",
dataType: "html",
url: "/refreshDetail",
data: JSON.stringify({"id": id}),
success: function(response) {
$(".containerDetailView").html(response);
}
});
IdObject.java
public class IdObject {
int id;
public IdObject(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
WebInit.java
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
...
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.6</version>
</dependency>
我尝试了什么?
我尝试像这样配置WebInit.java:
public void onStartup(ServletContext container) {
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext =
new AnnotationConfigWebApplicationContext();
rootContext.register(WebConfig.class);
// Manage the lifecycle of the root application context
container.addListener(new ContextLoaderListener(rootContext));
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext =
new AnnotationConfigWebApplicationContext();
dispatcherContext.register(RootConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher =
container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
但这并没有改变任何事情。
然后我也尝试自己配置 Spring 消息转换器,但这也没有帮助。
我不觉得 AJAX 请求有什么问题,或者我在 Controller 中处理它的方式没有问题,但如果有的话请指出。
如果有人能给我任何关于如何解决这个问题的建议,我将不胜感激(:
你可以尝试这个ajax功能,它与spring兼容
$.ajax({
url: "/refreshDetail",
method: "POST",
dataType: 'json',
data: JSON.stringify({"id": id}),
success: function (data) {
$(".containerDetailView").html(response);
},
error: function (data) {
}
})
发送 JSON 时,数据类型不应为 html
我是一名优秀的程序员,十分优秀!