java - 运行 Spring WebApp 时代码状态 406

标签 java spring spring-mvc tomcat ant

我的项目文件夹中有这些文件

build.xml

version="1.0"?>

<property name="src.dir" value="src"/>
<property name="web.dir" value="war"/>
<property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
<property name="test.dir" value="test"/>
<property name="name" value="HelloWorld"/>

<path id="master-classpath">
    <fileset dir="${web.dir}/WEB-INF/lib">
        <include name="*.jar"/>
    </fileset>
    <!-- We need the servlet API classes: -->
    <!--  * for Tomcat 5/6 use servlet-api.jar -->
    <!--  * for other app servers - check the docs -->
    <fileset dir="${appserver.lib}">
        <include name="servlet*.jar"/>
    </fileset>
    <pathelement path="${build.dir}"/>
</path>

<target name="usage">
    <echo message=""/>
    <echo message="${name} build file"/>
    <echo message="-----------------------------------"/>
    <echo message=""/>
    <echo message="Available targets are:"/>
    <echo message=""/>
    <echo message="build     --> Build the application"/>
    <echo message="deploy    --> Deploy application as directory"/>
    <echo message="deploywar --> Deploy application as a WAR file"/>
    <echo message="start-webapp   --> Start application in Tomcat"/>
    <echo message="stop-webapp    --> Stop application in Tomcat"/>
    <echo message="deploy-webapp     --> Deploy application in Tomcat"/>
    <echo message="undeploy-webapp      --> Undeploy application in Tomcat"/>
    <echo message="list      --> List Tomcat applications"/>
    <echo message=""/>
</target>

<target name="build" description="Compile main source tree java files">
    <mkdir dir="${build.dir}"/>
    <javac destdir="${build.dir}"  debug="true"
           deprecation="false" optimize="false" failonerror="true">
        <src path="${src.dir}"/>
        <classpath refid="master-classpath"/>
    </javac>
</target>

<target name="buildtests" description="Building All TestCases">
    <mkdir dir="${build.dir}"/>
    <javac destdir="${build.dir}" source="1.5" target="1.5" debug="true"
           deprecation="false" optimize="false" failonerror="true">
        <src path="${test.dir}"/>
        <classpath refid="master-classpath"/>
    </javac>
</target>

<target name="clean" description="Cleaning All build files">
    <delete>
        <fileset dir="${build.dir}">
            <include name="**/*.class"/>
        </fileset>
    </delete>
</target>

<target name="tests" depends="build,buildtests" description="Running All TestCases">
    <junit printsummary="on" fork="false" haltonfailure="false" failureproperty="tests.failed"
           showoutput="true">
        <classpath refid="master-classpath"/>
        <formatter type="brief" usefile="false"/>

        <batchtest>
            <fileset dir="${build.dir}">
                <include name="**/*Tests.*"/>
            </fileset>
        </batchtest>
    </junit>

    <fail if="tests.failed">
        tests.failed=${tests.failed}
        ***********************************************************
        ***********************************************************
        ****  One or more tests failed!  Check the output ...  ****
        ***********************************************************
        ***********************************************************
    </fail>
</target>

<target name="deploy" depends="build" description="Deploy application">
    <copy todir="${deploy.path}/${name}" preservelastmodified="true">
        <fileset dir="${web.dir}">
            <include name="**/*.*"/>
        </fileset>
    </copy>
</target>

<target name="deploywar" depends="build" description="Deploy application as a WAR file">
    <war destfile="${name}.war"
         needxmlfile="false">
        <fileset dir="${web.dir}">
            <include name="**/*.*"/>
        </fileset>
    </war>
    <copy todir="${deploy.path}" preservelastmodified="true">
        <fileset dir=".">
            <include name="*.war"/>
        </fileset>
    </copy>
</target>

<!-- ============================================================== -->
<!-- Tomcat tasks - remove these if you don't have Tomcat installed -->
<!-- ============================================================== -->

<path id="catalina-ant-classpath">
    <!-- We need the Catalina jars for Tomcat -->
    <!--  * for other app servers - check the docs -->
    <fileset dir="${appserver.lib}">
        <include name="catalina-ant.jar"/>
        <include name="tomcat-coyote.jar"/>
        <include name="tomcat-util.jar"/>
    </fileset>
    <fileset dir="${appserver.home}/bin">
        <include name="tomcat-juli.jar"/>
    </fileset>
</path>

<taskdef name="catalina-deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-list" classname="org.apache.catalina.ant.ListTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-reload" classname="org.apache.catalina.ant.ReloadTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-findleaks" classname="org.apache.catalina.ant.FindLeaksTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-resources" classname="org.apache.catalina.ant.ResourcesTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-start" classname="org.apache.catalina.ant.StartTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-stop" classname="org.apache.catalina.ant.StopTask" classpathref="catalina-ant-classpath"/>
<taskdef name="catalina-undeploy" classname="org.apache.catalina.ant.UndeployTask" classpathref="catalina-ant-classpath"/>

<target name="start-webapp" description="Start application in Tomcat">
    <catalina-start url="${tomcat.manager.url}"
                    username="${tomcat.manager.username}"
                    password="${tomcat.manager.password}"
                    path="/${name}" />
</target>

<target name="stop-webapp" description="Stop application in Tomcat">
    <catalina-stop url="${tomcat.manager.url}"
             username="${tomcat.manager.username}"
             password="${tomcat.manager.password}"
             path="/${name}" />
</target>

<target name="deploy-webapp" description="Deploy application in Tomcat">
    <catalina-deploy url="${tomcat.manager.url}"
            username="${tomcat.manager.username}"
            password="${tomcat.manager.password}"
            path="/${name}"
            war="file:${deploy.path}/${name}.war"/>
</target>

<target name="undeploy-webapp" description="Undeploy Tomcat application">
    <catalina-undeploy url="${tomcat.manager.url}"
           username="${tomcat.manager.username}"
           password="${tomcat.manager.password}"
           path="/${name}"/>
</target>

<target name="list" description="List Tomcat applications">
    <catalina-list url="${tomcat.manager.url}"
          username="${tomcat.manager.username}"
          password="${tomcat.manager.password}"/>
</target>

<target name="reload" description="Reload Application in Tomcat">
    <catalina-reload url="${tomcat.manager.url}"
                     username="${tomcat.manager.username}"
                     password="${tomcat.manager.password}"
                     path="/${name}"/>
</target>

<!-- End Tomcat tasks -->

AppIntializer.java

package HelloWorld.web.config;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class AppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.register(AppConfig.class);
    ctx.setServletContext(servletContext);

    Dynamic dynamic = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
    dynamic.addMapping("/");
    dynamic.setLoadOnStartup(1);
}
}

AppConfig.java

package HelloWorld.web.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "HelloWorld.web")
public class AppConfig {
}

Person.java

package HelloWorld.web.POJO;


public class Person {

private String id;

private String name;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

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

HelloController.java

package HelloWorld.web.controller;

import HelloWorld.web.POJO.Person;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/data")
public class HelloController {

protected final Log logger = LogFactory.getLog(getClass());

@RequestMapping(value = "/persons",  method = RequestMethod.GET, headers="Accept=application/json")
public Person handleRequest() {
    Person person = new Person();
    person.setId("1");
    person.setName("Kuch");
    return person;
}
}

lib 文件夹包含 spring、jackson、servlet-api、common-logging jar

commons-logging-1.2-javadoc.jar
    commons-logging-1.2.jar
    hamcrest-core-1.3.jar
    jackson-core-2.9.3.jar
    junit-4.12.jar
    servlet-api.jar
    spring-aop-5.0.2.RELEASE-javadoc.jar
    spring-aop-5.0.2.RELEASE-sources.jar
    spring-aop-5.0.2.RELEASE.jar
    spring-aspects-5.0.2.RELEASE-javadoc.jar
    spring-aspects-5.0.2.RELEASE-sources.jar
    spring-aspects-5.0.2.RELEASE.jar
    spring-beans-5.0.2.RELEASE-javadoc.jar
    spring-beans-5.0.2.RELEASE-sources.jar
    spring-beans-5.0.2.RELEASE.jar
    spring-context-5.0.2.RELEASE-javadoc.jar
    spring-context-5.0.2.RELEASE-sources.jar
    spring-context-5.0.2.RELEASE.jar
    spring-context-indexer-5.0.2.RELEASE-javadoc.jar
    spring-context-indexer-5.0.2.RELEASE-sources.jar
    spring-context-indexer-5.0.2.RELEASE.jar
    spring-context-support-5.0.2.RELEASE-javadoc.jar
    spring-context-support-5.0.2.RELEASE-sources.jar
    spring-context-support-5.0.2.RELEASE.jar
    spring-core-5.0.2.RELEASE-javadoc.jar
    spring-core-5.0.2.RELEASE-sources.jar
    spring-core-5.0.2.RELEASE.jar
    spring-expression-5.0.2.RELEASE-javadoc.jar
    spring-expression-5.0.2.RELEASE-sources.jar
    spring-expression-5.0.2.RELEASE.jar
    spring-instrument-5.0.2.RELEASE-javadoc.jar
    spring-instrument-5.0.2.RELEASE-sources.jar
    spring-instrument-5.0.2.RELEASE.jar
    spring-jcl-5.0.2.RELEASE-javadoc.jar
    spring-jcl-5.0.2.RELEASE-sources.jar
    spring-jcl-5.0.2.RELEASE.jar
    spring-jdbc-5.0.2.RELEASE-javadoc.jar
    spring-jdbc-5.0.2.RELEASE-sources.jar
    spring-jdbc-5.0.2.RELEASE.jar
    spring-jms-5.0.2.RELEASE-javadoc.jar
    spring-jms-5.0.2.RELEASE-sources.jar
    spring-jms-5.0.2.RELEASE.jar
    spring-messaging-5.0.2.RELEASE-javadoc.jar
    spring-messaging-5.0.2.RELEASE-sources.jar
    spring-messaging-5.0.2.RELEASE.jar
    spring-orm-5.0.2.RELEASE-javadoc.jar
    spring-orm-5.0.2.RELEASE-sources.jar
    spring-orm-5.0.2.RELEASE.jar
    spring-oxm-5.0.2.RELEASE-javadoc.jar
    spring-oxm-5.0.2.RELEASE-sources.jar
    spring-oxm-5.0.2.RELEASE.jar
    spring-test-5.0.2.RELEASE-javadoc.jar
    spring-test-5.0.2.RELEASE-sources.jar
    spring-test-5.0.2.RELEASE.jar
    spring-tx-5.0.2.RELEASE-javadoc.jar
    spring-tx-5.0.2.RELEASE-sources.jar
    spring-tx-5.0.2.RELEASE.jar
    spring-web-5.0.2.RELEASE-javadoc.jar
    spring-web-5.0.2.RELEASE-sources.jar
    spring-web-5.0.2.RELEASE.jar
    spring-webflux-5.0.2.RELEASE-javadoc.jar
    spring-webflux-5.0.2.RELEASE-sources.jar
    spring-webflux-5.0.2.RELEASE.jar
    spring-webmvc-5.0.2.RELEASE-javadoc.jar
    spring-webmvc-5.0.2.RELEASE-sources.jar
    spring-webmvc-5.0.2.RELEASE.jar
    spring-websocket-5.0.2.RELEASE-javadoc.jar
    spring-websocket-5.0.2.RELEASE-sources.jar
    spring-websocket-5.0.2.RELEASE.jar

当我尝试点击 http://localhost:8080/HelloWorld/data/persons 时 它给出了这个错误 HTTP 状态 406 – Not Acceptable

类型状态报告

描述 根据请求中收到的主动协商 header 字段,目标资源没有用户代理可以接受的当前表示,并且服务器不愿意提供默认表示。 Apache Tomcat/8.5.24

请尝试解决。

最佳答案

感谢您在我添加 jackson-all-1.0.9 并将对象转换为字符串时解决了这个问题。

关于java - 运行 Spring WebApp 时代码状态 406,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48252313/

相关文章:

spring - org.thymeleaf.exceptions.TemplateInputException 异常

java - 如何在 Spring 中从上下文设置静态最终参数?

spring - 如何从Spring Data REST产生的表示中删除超媒体元素?

java - Spring 登录页面可以工作,但我的登录页面不行?

java - JSSC 中的读写超时

java - 窗口关闭时更新 JTable

java - 如何在 JTextField 中移动光标位置

java - 类的 ArrayList。使困惑

java - 如何在Spring RestTemplate中发送调用者的IP地址

java - @ResponseBody 和语言导致编码错误