V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Sparetire
V2EX  ›  问与答

初学 Spring MVC 遇到一个问题,望解答

  •  
  •   Sparetire · 2016-02-25 00:13:08 +08:00 · 2216 次点击
    这是一个创建于 3194 天前的主题,其中的信息可能已经有所发展或是发生改变。

    初学 Spring MVC 想试着写个 REST api 返回一个 json , Spring 版本 4.2.4 ,按照官方文档以下配置

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
            <property name="order" value="1"/>
            <property name="viewResolvers">
                <list>
                    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
                    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
                        <property name="prefix" value="/WEB-INF/jsps/"/>
                        <property name="suffix" value=".jsp"/>
                    </bean>
                </list>
            </property>
            <property name="defaultViews">
                <list>
                    <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
                </list>
            </property>
        </bean>
    

    Controller 的部分

    @Controller
    @RequestMapping("/")
    public class HelloController {
        @RequestMapping("/hello")
        public String helloMvc() {
            return "hello";
        }
    
        @RequestMapping("/json")
        public @ResponseBody Person getPerson() {
            return new Person(123, "Tom", "aaa");
        }
    }
    

    在 tomcat 上运行结果, jsp 能正常显示, json 却报以下错误

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Unrecognized Type: [null]
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:981)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    

    看意思是参数错误,但并不知道是为什么。。完整 demo 见 https://github.com/sparetire/demo/

    望各位大大解答,感谢!

    11 条回复    2016-02-25 09:56:34 +08:00
    saximoer
        1
    saximoer  
       2016-02-25 00:31:20 +08:00
    有配置 message-converters 么?
    ewBuyVmLZMZE
        2
    ewBuyVmLZMZE  
       2016-02-25 00:46:02 +08:00
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.5</version>
    </dependency>
    修改版本号,降级。回答完毕。
    ewBuyVmLZMZE
        3
    ewBuyVmLZMZE  
       2016-02-25 00:48:07 +08:00   ❤️ 1
    如果想用 2.7.x 版本的 Jackson ,那么 Spring 的版本请高于 4.3.x 。
    HunterPan
        4
    HunterPan  
       2016-02-25 08:38:16 +08:00
    我直接用 fastJson
    Sparetire
        5
    Sparetire  
    OP
       2016-02-25 09:00:50 +08:00
    @syhily 感谢,已解决!
    Sparetire
        6
    Sparetire  
    OP
       2016-02-25 09:02:05 +08:00
    @saximoer 暂时还不知道 message-converters 是什么。。不过也感谢帮助
    Sparetire
        7
    Sparetire  
    OP
       2016-02-25 09:04:08 +08:00
    @HunterPan 3Q ,还不知道怎么在 Spring MVC 中替换默认的 json 解析。。
    HunterPan
        8
    HunterPan  
       2016-02-25 09:33:13 +08:00
    @Sparetire
    Element : message-converters
    Configures one or more HttpMessageConverter types to use for converting @RequestBody method
    parameters and @ResponseBody method return values. Using this configuration element is optional.
    HttpMessageConverter registrations provided here will take precedence over HttpMessageConverter
    types registered by default. Also see the register-defaults attribute if you want to turn off default
    registrations entirely.
    reeco
        9
    reeco  
       2016-02-25 09:36:22 +08:00
    ewBuyVmLZMZE
        10
    ewBuyVmLZMZE  
       2016-02-25 09:54:42 +08:00 via iPhone
    @reeco 之前有过类似的想法,最后还是放弃了,默认的就好。
    beneo
        11
    beneo  
       2016-02-25 09:56:34 +08:00
    关键词 @RestContoller
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2357 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:02 · PVG 09:02 · LAX 17:02 · JFK 20:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.