当前位置: 首页 > 知识库问答 >
问题:

使用jackson-datatype-jsr310的Spring配置中的RESTful服务

薛寒
2023-03-14

我正在尝试配置Java 8

使用ContextResolver的原因是我需要格式化java。时间LocalDateTime转换为JSON。

我首先通过添加@JsonFormat在我的模型bean上尝试注释,

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_FORMAT)    
@DateTimeFormat(pattern=DATE_FORMAT) 
@Column(name = "JOINING_DATE", nullable = false)
@Type(type="org.hibernate.type.LocalDateTimeType")
private LocalDateTime joiningDate;

并得到以下错误:

Java语言lang.NoSuchMethodError:com。fasterxml。杰克逊。数据类型。jsr310.ser。JSR310格式化序列化数据库。findFormatOverrides(Lcom/fasterxml/jackson/databind/SerializerProvider;Lcom/fasterxml/jackson/databind/BeanProperty;Ljava/lang/Class;)Lcom/fasterxml/jackson/annotation/JsonFormat$Value;

其次,我删除了@JsonFormat注释并尝试使用ContextResolver,

ObjectMapperContextResolver。Java语言

package com.jobs.spring.configuration;

import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {  
    private final ObjectMapper MAPPER;

    public ObjectMapperContextResolver() {
        MAPPER = new ObjectMapper();
        MAPPER.registerModule(new JavaTimeModule());
        MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return MAPPER;
    }  
}

并得到以下错误:

[org.springframework.web.servlet.页面未找到](默认任务4)在DispatcherServlet中未找到带有URI[/jbosswildfly/雇员/列表]的HTTP请求的映射

请有人建议,我认为我的Spring配置可能不正确。

  • 在第一种情况下,使用@JsonFormat注释,请求命中RESTful服务,但得到一个NoSuchMethodError,表明我的依赖项不正确

正如我所说,如果我不使用@JsonFormat注释或ContextResolver,我可以成功调用RESTful服务(但我需要格式化日期)。

谢谢你

我的配置如下:

pom.xml

.
.
.
<jackson.version>2.8.0</jackson.version>
.
.
.
        <!-- JSON -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
            <version>${jackson.version}</version>
        </dependency>

网状物xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         metadata-complete="false">

         <servlet>
            <servlet-name>rest</html" target="_blank">servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
         </servlet>

         <servlet-mapping>
            <servlet-name>rest</servlet-name>
            <url-pattern>/*</url-pattern>
         </servlet-mapping>

</web-app>

rest-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context-4.0.xsd
                           http://www.springframework.org/schema/mvc 
                           http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <context:component-scan base-package="com.jobs.spring" />
    <mvc:annotation-driven />    
</beans>

Rest控制

@CrossOrigin(origins = {"*"})
@RestController
@RequestMapping(EmployeeRESTService.BASE_URI)
public class EmployeeRESTService {

    public static final String BASE_URI = "/employee";

    @Autowired
    private EmployeeService employeeService;

    @RequestMapping(value = "/list", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public List<Employee> findAllEmployees() {
        return employeeService.findAll();
    }

    @RequestMapping(value = "/save", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody String saveEmployee(@RequestBody Employee employee){
        Long id = employeeService.save(employee);
        return Long.toString(id);
    }
}

共有1个答案

漆雕稳
2023-03-14

解决了

通过添加以下类,它现在可以工作了:

package com.jobs.spring.configuration;

import java.text.SimpleDateFormat;
import java.util.List;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.indentOutput(true).dateFormat(new SimpleDateFormat("yyyy-MM-dd"));
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
    }
}
 类似资料:
  • 我只使用XML配置来创建MVCWeb应用程序(没有注释)。 现在我想用Spring创建一个RESTful web服务,但我找不到任何不使用注释的教程。 有没有办法只使用XML配置构建RESTful web服务 还是必须使用注释? 例如,您可以仅使用如下所示的XML配置来部署MVC模式的web应用程序。 然而,当我试图为URL映射一个方法时,我遇到了麻烦,例如HTTP方法:,URL:——这样我就可以

  • 我正在用spring、springfox、jackson开发一个REST API,我的model类包含一个属性: 我在依赖项中包含了jackson-datatype-jsr310版本2.9.0.pr4,因此它的序列化和反序列化很好。但是我的swagger-ui现在显示了很多模型对象,比如、、等等,这非常混乱,因为zone ID是序列化为简单字符串的。生成的API规范中的情况相同。我如何防止大摇大摆

  • 我试图使用Java配置创建一个Spring4 RESTFul服务,并将其部署到Tomcat。但我无法到达终点。我错过了什么?这就是我所拥有的。 我被派往Tomcat。Tomcat开始很好。我试着点击它http://localhost:8080/api/greetings,它给了我404。我错过了什么? 谢了!

  • 我想在我的项目中使用Jackson的配置版本(忽略空值和snake_case,也使用一些自定义模块)。 在我的大型项目中,我无法让Spring MVC真正使用这个映射器。 如果我现在查看调试器中的值,它是。但是如果我让控制器运行,实际的响应是。 当我删除时,它就可以工作了。如何将配置的映射器与MVC一起使用,而不删除Web MVC的其余自动配置?

  • 我想请您对此提供帮助,我在中配置了一个项目,以便使用和构建一个Restful Webservice来连接数据库。 问题是我不知道如何配置控制器来执行并返回。 我已经开发了数据访问层、服务和控制器,但我不知道如何配置项目来执行:例如。 web.xml 错误: org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项得

  • 我想从网站上下载一份PDF。PDF需要在代码中生成,我认为这是freemarker和像iText这样的PDF生成框架的组合。还有更好的办法吗? 然而,主要的问题是,我不知道如何允许用户通过Spring控制器下载文件?