Рубрики
Без рубрики

Пример абстрактного контроллера Spring MVC

– Пример абстрактного контроллера Spring MVC

Автор оригинала: mkyong.

Для справки в этой статье показано, как создать Абстрактный класс для контроллера Spring или шаблон шаблона метода.

1. Абстрактный Контроллер

В абстрактном классе аннотация @Controller необязательна, ее применит ваш реализованный класс.

package com.mkyong.web.controller;

import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.mkyong.web.generator.bo.ResultGenerator;

public abstract class AbstractResultController {

	private final Logger logger = LoggerFactory.getLogger(getClass());

	abstract ResultGenerator GetResultGenerator();
	abstract String GetViewName();
	abstract Validator GetValidator();

	@RequestMapping(value = "/{q:.+}", method = RequestMethod.GET)
	final ModelAndView getModelAndView(@PathVariable("q") String q) {

		logger.debug("getModelAndView : [q] : {}", q);

		ModelAndView model = new ModelAndView();
		Map results = GetResultGenerator().getResultForController(q);
		model.addObject("data", results);
		model.setViewName(GetViewName());
		
		logger.debug("getModelAndView : [model] : {}", model);

		return model;

	}

}

2. Пружинные Контроллеры Расширяют Абстракцию

Немногие контроллеры Spring выходят за рамки абстрактного класса и соответствующего им пути URI.

2.1Путь = /хостинг/{q:.+}

package com.mkyong.web.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.mkyong.web.generator.bo.ResultGenerator;

@Controller
@RequestMapping("/hosting")
public class ResultControllerHosting extends AbstractResultController {

	private static final String VIEW_NAME = "hosting";
	
	@Autowired
	@Qualifier("resultGeneratorHosting")
	ResultGenerator resultGenerator;
	
	@Override
	ResultGenerator GetResultGenerator() {
		return resultGenerator;
	}

	@Override
	String GetViewName() {
		return VIEW_NAME;
	}

}

2.2 Путь = /сайт/{вопрос:.+}

package com.mkyong.web.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.mkyong.web.generator.bo.ResultGenerator;

@Controller
@RequestMapping("/site")
public class ResultControllerSite extends AbstractResultController {

	private static final String VIEW_NAME = "site";
	
	@Autowired
	@Qualifier("resultGeneratorSite")
	ResultGenerator resultGenerator;

	@Override
	ResultGenerator GetResultGenerator() {
		return resultGenerator;
	}

	@Override
	String GetViewName() {
		return VIEW_NAME;
	}

}

Сделано.

Рекомендации

  1. Учебник по Oracle Java: Абстрактные методы и классы
  2. Весенний абстрактный контроллер javadoc

Оригинал: “https://mkyong.com/spring-mvc/spring-abstract-controller-example/”