标签: spring-mvc

Spring Boot配置和使用两个DataSource

我是Spring和Spring Boot的新手.如何配置和使用两个数据源.

例如,这是第一个数据源的内容.

application.properties

#first db
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = oracle.jdbc.OracleDriver

#second db ...
Run Code Online (Sandbox Code Playgroud)

应用类

@SpringBootApplication
public class SampleApplication
{
    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

如何修改application.properties以添加其他数据源?如何将其自动装配以供其他仓库使用?

java spring spring-mvc spring-boot

174
推荐指数
6
解决办法
18万
查看次数

Spring MVC - 如何在Spring控制器的地图中获取所有请求参数?

示例网址:

../search/?attr1=value1&attr2=value2&attr4=value4
Run Code Online (Sandbox Code Playgroud)

我不知道attr1,att2和attr4的名称.

我希望能够做类似的事情(或类似的,不关心,只要我有权访问请求参数名称的地图 - >值:

@RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET)
public void search(HttpServletRequest request, 
@PathVariable Map<String,String> allRequestParams, ModelMap model)
throws Exception {//TODO: implement}
Run Code Online (Sandbox Code Playgroud)

如何使用Spring MVC实现这一目标?

java spring spring-mvc

168
推荐指数
8
解决办法
21万
查看次数

如何获取活动用户的UserDetails

在我的控制器中,当我需要活动(登录)用户时,我正在执行以下操作来获取我的UserDetails实现:

User activeUser = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
log.debug(activeUser.getSomeCustomField());
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我认为Spring可以在这样的情况下让生活更轻松.有没有办法将UserDetails自动装配到控制器或方法?

例如,类似于:

public ModelAndView someRequestHandler(Principal principal) { ... }
Run Code Online (Sandbox Code Playgroud)

但是,而不是得到UsernamePasswordAuthenticationToken,我得到了一个UserDetails

我正在寻找一个优雅的解决方案.有任何想法吗?

java spring spring-mvc spring-security

165
推荐指数
6
解决办法
12万
查看次数

Spring MVC中的@RequestParam处理可选参数

Spring控制器是否可以处理这两种请求?

1) http://localhost:8080/submit/id/ID123432?logout=true

2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432

如果我定义了这种类型的单个控制器:

 @RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,   
 produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
                              @RequestParam(value = "logout", required = false) String logout,
                              @RequestParam("name") String username,
                              @RequestParam("password") String password,
                              @ModelAttribute("submitModel") SubmitModel model,
                              BindingResult errors) throws LoginException {...}
Run Code Online (Sandbox Code Playgroud)

不接受带有"注销"的HTTP请求.

如果我定义两个控制器来分别处理每个请求,Spring会抱怨异常"已经有'Controller'bean方法...已映射".

java spring spring-mvc

165
推荐指数
3
解决办法
28万
查看次数

servlet中的<mvc:annotation-driven />和<context:annotation-config />有什么区别?

我正在从Spring 2.5迁移到Spring 3.

他们介绍了<mvc:annotation-driven />哪些黑魔法.这应该只在servlet配置文件中声明.

在Spring 2.5中,我刚刚使用<context:annotation-config /><context:component-scan base='...'/>标记声明application-context.xml和调度程序servlet配置XML以及适当的基础包进行扫描.

所以,我不知道是什么样的区别mvc:annotation-driven,并context:annotation-config在servlet配置标签和我有什么可以消除在春季3配置文件?

spring spring-mvc spring-3

154
推荐指数
3
解决办法
14万
查看次数

Spring Boot不提供静态内容

我无法让我的Spring-boot项目提供静态内容.

我已经放在一个命名的文件夹staticsrc/main/resources.在里面我有一个名为的文件夹images.当我打包应用程序并运行它时,它找不到我放在该文件夹上的图像.

我试图把静态文件中public,resourcesMETA-INF/resources但没有任何工程.

如果我jar -tvf app.jar我可以看到文件在右侧文件夹的jar内: /static/images/head.png例如,但是调用:http://localhost:8080/images/head.png,我得到的只是一个404

有什么想法为什么spring-boot没有找到这个?(我使用的是1.1.4 BTW)

spring spring-mvc spring-boot

154
推荐指数
10
解决办法
15万
查看次数

Spring MVC:如何执行验证?

我想知道对用户输入执行表单验证的最简洁和最好的方法是什么.我见过一些开发人员实现的org.springframework.validation.Validator.关于这一点的问题:我看到它验证了一个类.是否必须使用用户输入中的值手动填充类,然后传递给验证器?

我对用于验证用户输入的最干净,最好的方法感到困惑.我知道传统的使用方法,request.getParameter()然后手动检查nulls,但我不想在我的所有验证Controller.关于这方面的一些好建议将不胜感激.我没有在这个应用程序中使用Hibernate.

java validation user-input spring-mvc

153
推荐指数
4
解决办法
19万
查看次数

为Spring RESTful应用程序使用ResponseEntity <T>和@RestController时

我正在使用Spring Framework 4.0.7,以及MVC和Rest

我可以和平地工作:

  • @Controller
  • ResponseEntity<T>

例如:

@Controller
@RequestMapping("/person")
@Profile("responseentity")
public class PersonRestResponseEntityController {
Run Code Online (Sandbox Code Playgroud)

用这个方法(只是为了创建)

@RequestMapping(value="/", method=RequestMethod.POST)
public ResponseEntity<Void> createPerson(@RequestBody Person person, UriComponentsBuilder ucb){
    logger.info("PersonRestResponseEntityController  - createPerson");
    if(person==null)
        logger.error("person is null!!!");
    else
        logger.info("{}", person.toString());

    personMapRepository.savePerson(person);
    HttpHeaders headers = new HttpHeaders();
    headers.add("1", "uno");
    //http://localhost:8080/spring-utility/person/1
    headers.setLocation(ucb.path("/person/{id}").buildAndExpand(person.getId()).toUri());

    return new ResponseEntity<>(headers, HttpStatus.CREATED);
}
Run Code Online (Sandbox Code Playgroud)

返回一些东西

@RequestMapping(value="/{id}", method=RequestMethod.GET)
public ResponseEntity<Person> getPerson(@PathVariable Integer id){
    logger.info("PersonRestResponseEntityController  - getPerson - id: {}", id);
    Person person = personMapRepository.findPerson(id);
    return new ResponseEntity<>(person, HttpStatus.FOUND);
}
Run Code Online (Sandbox Code Playgroud)

工作良好

我可以这样做:

  • @RestController(我知道它与@Controller+ …

spring spring-mvc spring-3 spring-4

153
推荐指数
4
解决办法
22万
查看次数

添加Spring Boot应用程序的上下文路径

我试图以编程方式设置Spring Boot应用程序上下文根.上下文根的原因是我们希望从中访问应用程序localhost:port/{app_name}并将所有控制器路径附加到它.

这是web-app的应用程序配置文件.

@Configuration
public class ApplicationConfiguration {

  Logger logger = LoggerFactory.getLogger(ApplicationConfiguration.class);

  @Value("${mainstay.web.port:12378}")
  private String port;

  @Value("${mainstay.web.context:/mainstay}")
  private String context;

  private Set<ErrorPage> pageHandlers;

  @PostConstruct
  private void init(){
      pageHandlers = new HashSet<ErrorPage>();
      pageHandlers.add(new ErrorPage(HttpStatus.NOT_FOUND,"/notfound.html"));
      pageHandlers.add(new ErrorPage(HttpStatus.FORBIDDEN,"/forbidden.html"));
  }

  @Bean
  public EmbeddedServletContainerFactory servletContainer(){
      TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
      logger.info("Setting custom configuration for Mainstay:");
      logger.info("Setting port to {}",port);
      logger.info("Setting context to {}",context);
      factory.setPort(Integer.valueOf(port));
      factory.setContextPath(context);
      factory.setErrorPages(pageHandlers);
      return factory;
  }

  public String getPort() {
      return port;
  }

  public void setPort(String port) {
      this.port = …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-boot

148
推荐指数
8
解决办法
27万
查看次数

在Spring Boot的application.properties中使用env变量

我们正在开发一个Spring Boot Web应用程序,我们使用的数据库是MySql ;

  • 我们的设置是我们首先在本地测试它(意味着我们需要在我们的PC上安装MySql);

  • 然后我们推向Bitbucket ;

  • Jenkins自动检测到对Bitbucket的新推送并对其进行构建(对于Jenkins mvn构建要通过,我们还需要在运行Jenkins的虚拟机上安装MySql).

  • 如果Jenkins构建了传递,我们将代码推送到OpenShift上的应用程序(使用Jenkins上的Openshift部署插件).

我们可能已经弄明白的问题是:

  • application.properties我们不能硬编码MySql信息.由于我们的项目将在3个不同的地方运行(本地,JenkinsOpenShift),我们需要使数据源字段动态化application.properties(我们知道有不同的方法,但我们现在正在研究这个解决方案).

    spring.datasource.url = 
    spring.datasource.username = 
    spring.datasource.password = 
    
    Run Code Online (Sandbox Code Playgroud)

我们提出的解决方案是在本地和Jenkins vm中创建系统环境变量(以与OpenShift命名的方式命名它们)并分别为它们分配正确的值:

export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"
Run Code Online (Sandbox Code Playgroud)

我们做到了这一点并且有效.我们还检查Map<String, String> env = System.getenv();过环境变量可以变成java变量:

String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");   
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");   
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST"); 
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");
Run Code Online (Sandbox Code Playgroud)

现在唯一剩下的就是我们需要在我们中使用这些java变量application.properties,这就是我们遇到的问题.

在哪个文件夹,以及我们如何,需要分配password,userName, …

java mysql spring spring-mvc openshift

148
推荐指数
7
解决办法
21万
查看次数