Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringMVC中将.json映射到.html url_Java_Json_Spring_Jackson - Fatal编程技术网

Java 如何在SpringMVC中将.json映射到.html url

Java 如何在SpringMVC中将.json映射到.html url,java,json,spring,jackson,Java,Json,Spring,Jackson,我正在开发Spring4.2MVC应用程序。这里我试图调用一个.html扩展url,该url应该返回json数据。问题是,当控制器调用特定url时,我得到一个org.springframework.web.HttpMediaTypeNotAcceptableException。如果我使用.json扩展名而不是.html扩展名,这将非常有效 我使用以下JAR进行json映射 jackson-annotations-2.8.7.jar jackson-core-2.8.7.jar jackson-c

我正在开发Spring4.2MVC应用程序。这里我试图调用一个.html扩展url,该url应该返回json数据。问题是,当控制器调用特定url时,我得到一个org.springframework.web.HttpMediaTypeNotAcceptableException。如果我使用.json扩展名而不是.html扩展名,这将非常有效

我使用以下JAR进行json映射

jackson-annotations-2.8.7.jar
jackson-core-2.8.7.jar
jackson-core-asl-1.9.13.jar
jackson-databind-2.8.7.jar
jackson-datatype-joda-2.8.7.jar
jackson-jaxrs-json-provider-2.8.7.jar
jackson-mapper-asl-1.9.13.jar
jackson-module-jaxb-annotations-2.8.7.jar
json-simple-1.1.jar

以下是我基于java的配置,而不是web.xml

import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;


public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { AppConfig.class };
}

@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}

@Override
protected String[] getServletMappings() {
return new String[] { "*.html", "*.json"};
}

@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(getMultipartConfigElement());
}

private MultipartConfigElement getMultipartConfigElement() {
MultipartConfigElement multipartConfigElement = new MultipartConfigElement( LOCATION, MAX_FILE_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD);
return multipartConfigElement;
}

private static final long MAX_FILE_SIZE = 5242880; // 5MB : Max file size.
                                            // Beyond that size spring will throw exception.
private static final long MAX_REQUEST_SIZE = 20971520; // 20MB : Total request size containing Multi part.

private static final int FILE_SIZE_THRESHOLD = 0; // Size threshold after which files will be written to disk

}
我有一个调用url的ajax调用

                var getDetails = function() {
                    var id = {
                            "id" : $("#id").val()
                        }
                    $
                            .ajax({
                                type : "POST",
                                url : "../data/getDetails.html",
                                data : JSON.stringify(id),
                                contentType : "application/json; charset=utf-8",
                                mimeType: "application/json",
                                dataType : 'json',
                                success : function(data) {
             // do something

               }
以下是服务器日志

信息标准:71-2017-10-16 12:13:53调试DispatcherServlet:861-名为“dispatcher”的DispatcherServlet正在处理[/App/data/getDetails.html]的POST请求。

DEBUG DispatcherServlet:861-名为“dispatcher”的DispatcherServlet正在处理[/App/data/getDetails.html]的POST请求
INFO stdout:71-2017-10-16 12:13:53调试请求映射HandlerMapping:320-查找处理程序方法中的path/data/getDetails.html

DEBUG RequestMappingHandlerMapping:320-查找path/data/getDetails.html的处理程序方法
INFO stdout:71-2017-10-16 12:13:53调试异常HandlerExceptionResolver:131-从处理程序解析异常[null]:org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示形式

DEBUG exception handler exception resolver:131-从处理程序解析异常[null]:org.springframework.web.httpmediatype notacceptableexception:找不到可接受的表示形式
INFO stdout:71-2017-10-16 12:13:53调试DefaultListableBeanFactory:250-返回单例bean“globalExceptionController”的缓存实例

DEBUG DefaultListableBeanFactory:250-返回单例bean“globalExceptionController”的缓存实例

请帮忙

(我无权对你的帖子发表评论..所以请对我的帖子发表评论..)

您是否在注释中尝试过像
products=“application/json”
这样的
consumes=“application/json”

在ajax调用中,您同时使用了contentType和dataType。您希望得到json格式的响应,对吗?

(我无权对您的帖子发表评论..所以请对我的帖子发表评论..)

您是否在注释中尝试过像
products=“application/json”
这样的
consumes=“application/json”


在ajax调用中,您同时使用了contentType和dataType。您希望得到json格式的响应,对吗?

假设您使用的是默认值 spring mvc配置。默认情况下,它使用InternalResourceViewResolver。您需要做的是配置ContentNegotiatingViewResolver,它尝试根据内容类型解析视图。我不张贴一个例子,因为你们会发现很多在互联网上


我建议您阅读有关REST端点的内容,并在编写端点时使用适当的符号和标准。例如,在您的问题中,您有一个返回json响应的.html端点是非常正确的。

假设您使用的是默认值 spring mvc配置。默认情况下,它使用InternalResourceViewResolver。您需要做的是配置ContentNegotiatingViewResolver,它尝试根据内容类型解析视图。我不张贴一个例子,因为你们会发现很多在互联网上



我建议您阅读有关REST端点的内容,并在编写端点时使用适当的符号和标准。例如,在您的问题中,您有一个返回json响应的.html端点是非常正确的。

Remove
@RequestMapping
注释生成
标记。然后它就会工作。

删除
@RequestMapping
注释中生成
标记。然后它就会起作用。

试着使用
products=“text/plain”
@SachinGupta没有试过working@SachinGupta我已经用服务器logRemove
products
tag更新了这个问题,然后运行了谢谢@Sachin,你救了我一天。请将其作为answr发布,以便我可以接受。请尝试使用
products=“text/plain”
@SachinGupta尝试不使用working@SachinGupta我已经用服务器logRemove
products
tag更新了这个问题,然后运行了谢谢@Sachin,你救了我一天。请将其作为answr发布,以便我可以接受。根据您的异常情况。您是否尝试了PRODUCTS={MediaType.APPLICATION_JSON_VALUE}?暂时您可以在ajax调用中注释mimeType。应该可以解决此问题。若要从控制器返回JSON格式的java对象,可以使用Gson api.use toJson()/fromJson()在使用.json时,转换jsonString/JavaJSON格式已经开始工作。。。这里的问题是控制器甚至无法正确映射调用。这里的问题似乎是.html格式对于JSONA来说是不可接受的。您是否尝试过生成={MediaType.APPLICATION_JSON_VALUE}?暂时您可以在ajax调用中注释mimeType。它应该可以解决此问题。要从控制器返回json格式的java对象,您可以使用Gson api。使用toJson()/fromJson()转换jsonString/javareturning json格式在使用.json时已经起作用了。。。这里的问题是控制器甚至无法正确映射调用。这里的问题似乎是.html格式对于json是不可接受的
                var getDetails = function() {
                    var id = {
                            "id" : $("#id").val()
                        }
                    $
                            .ajax({
                                type : "POST",
                                url : "../data/getDetails.html",
                                data : JSON.stringify(id),
                                contentType : "application/json; charset=utf-8",
                                mimeType: "application/json",
                                dataType : 'json',
                                success : function(data) {
             // do something

               }