Проблема с копипастом повторяющегося кода
Есть повторяющийся код в разных сервлетах. Нужно повторяющийся код как-то обработать, чтобы в дальнейшем легко править его, если нужно, а не ходить по всем листам, и не копипастить. Если есть какая-то подсказка - спасибо.
1- сервлета
public class RegisterRestServlet extends HttpServlet {
private final ObjectMapper objectMapper = new ObjectMapper();
private final LoginService loginService = new LoginService();
private final RegisterDtoValidator registerDtoValidator = new RegisterDtoValidator();
@Override
protected void doPost (HttpServletRequest req, HttpServletResponse resp) throw ServletException, IOException{
RegisterDto dto = this.objectMapper.readValue(req.getInputStream(), RegisterDto.class);
try {
this.registerDtoValidator.validate(dto);
this.loginService.register(dto.getFirstName(), dto.getLatName(), dto.getLogin(), dto.getPassword);
} catch (ApplicationException e){
resp.setStatus(400);
resp.setContentType("application/json");
resp.getWriter().write(this.objectMapper.writeValueAsString(new ResponseDto(e.getMessage())));
resp.getWriter().flush();
}
}
}
2-сервлета
public class LoginRestServlet extends HttpServlet {
private final ObjectMapper objectMapper = new ObjectMapper();
private final LoginService loginService = new LoginService();
@Override
protected void doPost (HttpServletRequest req, HttpServletResponse resp) throw ServletException, IOException{
LoginDto dto = this.objectMapper.readValue(req.getInputStream(), LoginDto.class);
try {
this.loginService.login(dto.getLogin(), dto.getPassword);
} catch (ApplicationException e){
resp.setStatus(400);
resp.setContentType("application/json");
resp.getWriter().write(this.objectMapper.writeValueAsString(new ResponseDto(e.getMessage())));
resp.getWriter().flush();
}
}
}
подскажите, что почитать, чтобы понять как это делаеться.
Ответы (1 шт):
Автор решения: Roman-Stop RU aggression in UA
→ Ссылка
Как-то так:
public abstract class ServletBase<T> extends HttpServlet {
private final ObjectMapper objectMapper = new ObjectMapper();
private final Class<?> requestDtoClass;
public ServletBase(Class<?> requestDtoClass) {
this.requestDtoClass = requestDtoClass;
}
protected abstract void processPost(T requestDto);
@Override
protected void doPost (HttpServletRequest req, HttpServletResponse resp) throw ServletException, IOException{
T requestDto = this.objectMapper.readValue(req.getInputStream(), requestDtoClass);
try {
processPost(requestDto);
} catch (ApplicationException e){
resp.setStatus(400);
resp.setContentType("application/json");
resp.getWriter().write(this.objectMapper.writeValueAsString(new ResponseDto(e.getMessage())));
resp.getWriter().flush();
}
}
}
public class RegisterRestServlet extends ServletBase<RegisterDto> {
private final LoginService loginService = new LoginService();
private final RegisterDtoValidator registerDtoValidator = new RegisterDtoValidator();
public RegisterRestServlet() {
super(RegisterDto.class);
}
@Override
protected void processPost(RegisterDto dto) {
this.registerDtoValidator.validate(dto);
this.loginService.register(dto.getFirstName(), dto.getLatName(), dto.getLogin(), dto.getPassword);
}
}
public class LoginRestServlet extends ServletBase<LoginDto> {
private final LoginService loginService = new LoginService();
public RegisterRestServlet() {
super(LoginDto.class);
}
@Override
protected void processPost(LoginDto dto) {
this.loginService.login(dto.getLogin(), dto.getPassword);
}
}