Tag: spring mvc

jacksonJSON – unmarshal上的“没有单字符串构造函数/工厂方法”错误

最简单的情况会给我带来麻烦。 我第一次遇到它。 我能够解组稍微复杂的json,但这个简单的失败了。 什么会导致这个以及为什么jackson只用一根弦就麻烦了? 一个包含用户角色名称的简单类。 public class UpdateUserRole { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 控制器内部 public void updateUserRole(@PathVariable Long id, @RequestBody UpdateUserRoleReq req) { } 一旦jackson看到这一点,它就会抛出这个错误 org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not instantiate value of type [simple type, class […]

在Spring MVC中使用Jackson JSON时,如何默认启用Pascal大小写?

我有一个使用Spring MVC创建和处理多个REST端点的项目。 我目前正致力于使用Jackson自动处理使用@RequestBody和@ResponseBody注释的JSON的分类/反序列化。 我让jackson工作了,所以我有一个起点。 我的问题是我们的旧序列化手动完成并使用Pascal套管而不是Camel套管(“MyVariable”而不是“myVariable”),jackson默认使用Camel套管。 我知道我可以使用@JsonProperty手动更改变量的名称。 话虽这么说,我不认为将@JsonProperty添加到我的所有变量中是一个可行的长期解决方案。 除了使用@JsonProperty注释之外,有没有办法让Jackson在序列化和反序列化时使用Pascal大小写? 编辑:看起来外部没有干净的方法。 有几个人建议重写不同的课程,以此来实现我的目标。 我愿意接受有关我可以改写的改变套管的建议。 目前我已经创建了一个自定义的ObjectMapper来设置我想要的一些属性(即Inclusion.NON_NULL )。 我还没有找到任何可以让我改变套管行为的地方。 有什么想法吗?

使用更新Cascade进行hibernate软删除

如果我有3个相互连接的类。 房间等级 @Entity @Table(name=”table_room”) Class Room{ @Id @GeneratedValue @Column(name=”id_room”) private Integer id; @Column(name=”name”) private String name; @OneToMany(mappedBy=”room”) private List people; @Column(name=”deleted”) private int deleted; } 人类 @Entity @Table(name=”table_person”) Class Person{ @Id @GeneratedValue @Column(name=”id_person”) private Integer id; @Column(name=”name”) private String name; @ManyToOne @JoinColumn(name=”id_room”) private Room room; @OneToMany(mappedBy=”person”) private List phones; @Column(name=”deleted”) private int deleted; } 然后是电话课 […]

使用Converter for type Boolean时,Spring复选框JSP标记被破坏

我已经使用Spring Roo和Spring MVC设置了一个CRUD Web应用程序。 我的问题是:因为我使用转换器来本地化显示布尔值,所以Spring JSP Tag 复选框被破坏,这意味着复选框不会从支持bean中获取实际值。 他们总是虚假和不受控制。 我做了一些研究,可能在org.springframework.web.servlet.tags.form.CheckboxTag的writeTagDetails方法中发现了错误。 以下是此方法的有趣部分: // the concrete type may not be a Boolean – can be String if (boundValue instanceof String) { boundValue = Boolean.valueOf((String) boundValue); } Boolean booleanValue = (boundValue != null ? (Boolean) boundValue : Boolean.FALSE); renderFromBoolean(booleanValue, tagWriter); 因为我使用转换器来显示yes / no而不是true / false,所以boundValue是一个String,并且Boolean.valueOf的调用总是导致false,因为valueOf方法不知道使用的Spring Converter并解释是/不是假的。 我怎样才能用Spring解决这个问题? 有人有线索吗? […]

Thymeleaf + Spring(不启动) – 如何显示来自messageSource的消息

我在使用Thymeleaf设置我的Spring MVC(不使用Boot,因为我在发现Spring Initializr之前启动它)以显示来自我的资源包的消息时遇到了问题。 该应用程序的主要配置类是: @Configuration @EnableWebMvc @ComponentScan(basePackages = “bcmh”) public class HrmConfiguration extends WebMvcConfigurerAdapter { @Bean public ViewResolver viewResolver() { ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); templateResolver.setTemplateMode(“HTML5”); templateResolver.setCharacterEncoding(“UTF-8”); templateResolver.setPrefix(“/WEB-INF/html/”); templateResolver.setSuffix(“.html”); SpringTemplateEngine engine = new SpringTemplateEngine(); engine.addDialect(new SpringSecurityDialect()); engine.addDialect(new LayoutDialect(new GroupingStrategy())); engine.setTemplateResolver(templateResolver); ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(engine); viewResolver.setCache(false); return viewResolver; } @Bean(name = “messageSource”) public MessageSource […]

MyBatis Spring MVC错误:绑定语句无效(未找到)

当我尝试使用MyBatis执行简单查询时,这是堆栈跟踪: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.my.package.persistence.BrandMapper.getBrand org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:189) org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:43) org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58) org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51) com.sun.proxy.$Proxy25.getBrand(Unknown Source) com.my.package.service.BrandService.getBrand(BrandService.java:18) com.my.package.service.BrandService$$FastClassBySpringCGLIB$$1140c60a.invoke() org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:649) com.my.package.service.BrandService$$EnhancerBySpringCGLIB$$ea6f89cd.getBrand() com.my.package.controller.HomeController.getBrands(HomeController.java:28) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 我正在使用Javaconfig语法而不是XML配置。 这是我的PersistenceConfig: @Configuration @EnableTransactionManagement @MapperScan(“com.my.package.persistence”) public class PersistenceConfig { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource […]

Spring – 是否有可能获得所有使用@ComponentScan注册的软件包?

是否可以获得在@ComponentScan注册的所有包的列表? 我需要知道,我的Spring Boot应用程序中注册了什么(root?)包…

定义默认语言环境并处理Spring Locale Interceptor的exception

是否可以定义应该加载的默认语言环境,以防用户设置?lang = unknownlang ? 在我的spring-servlet.xml中,我有: 另外如果我在我的url param中指定了无效字符,例如?lang = p @ t,spring会抛出一个应该处理的exception,我该如何处理呢? Error 500: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Locale part "'" contains invalid characters

Spring CustomNumberEditor解析不是数字的数字

我正在使用Spring CustomNumberEditor编辑器来绑定我的浮点值,并且我已经尝试过,如果值不是数字,有时它可以解析该值并且不返回任何错误。 数字= 10 ……那么数字是10,没有错误 number = 10a ……那么数字是10,没有错误 number = 10a25 ……那么数字是10并且没有错误 number = a ……错误,因为该数字无效 因此,似乎编辑器会解析该值,直到它能够并省略其余的值。 有没有办法配置这个编辑器所以validation是严格的(所以数字像10a或10a25导致错误)或我是否必须构建我的自定义实现。 我看起来像在CustomDateEditor / DateFormat中将lenient设置为false,因此无法将日期解析为最可能的日期。 我注册编辑器的方式是: @InitBinder public void initBinder(WebDataBinder binder){ NumberFormat numberFormat = NumberFormat.getInstance(); numberFormat.setGroupingUsed(false); binder.registerCustomEditor(Float.class, new CustomNumberEditor(Float.class, numberFormat, true)); } 谢谢。

没有@ResponseBody的@RestController方法工作不正确

我有以下控制器: @RestController @RequestMapping(value = “/base/url”) public class MyController { @RequestMapping( value = “/child/url”, method = RequestMethod.POST ) @ResponseBody public String mmm() { return “Ok”; } } 现在它的工作(服务器响应Ok )但我认为@ResponseBody多余的,因为我们使用@RestController并删除了@ResponseBody注释 我看到以下服务器响应: Error 404 Not Found HTTP ERROR 404 Problem accessing /base/url/child/url/Ok. Reason: Not Found Powered by Jetty:// 你能解释一下这种行为吗? PS Spring版本: 4.1.6.RELEASE PS 我发现只有这部分与mvc配置相关: