Jersey (jsr 311) and custom ViewProcessor

I seem to be tilting my head around how to implement a custom ViewProcessor in Jersey. I have the following resource:

@Path("/events")
public class EventController extends AbstractController {
    private static final Logger LOG = LoggerFactory.getLogger(EventController.class);

    @Resource(name = "eventService")
    private EventService eventService;

    public void setEventService(EventService eventService) {
        this.eventService = eventService;
    }

    @GET
    @Produces(MediaType.TEXT_HTML)
    public Viewable viewEventsAsHtml() {
        Map<String, String> model = new HashMap<String, String>();
        model.put("msg", "test");
        return new Viewable("/events.jsp", model);
    }
}

since I want to organize my jsp views in "/ WEB-INF / views / jsp", I expanded the JSPTemplateProcessor like this:

public class CJJspTemplateProcessor extends JSPTemplateProcessor {
    private static final Logger LOG = LoggerFactory.getLogger(CJJspTemplateProcessor.class);

    private final String basePath = "/WEB-INF/views/jsp";

    public CJJspTemplateProcessor(@Context ResourceConfig resourceConfig) {
        super(resourceConfig);
    }

    @Override
    public String resolve(String name) {
        String path;
        if (!name.endsWith(".jsp")) {
            name += ".jsp";
        }
        path = basePath + name;
        LOG.debug("resolving " + name + " to " + path);
        return path;
    }
}

but when I go to the event resource, I get 404, although I see that TemplateProcessor allowed the correct path for jsp in the log files.

Help plx :)

+3
source share
1 answer

You do not need a special TemplateProcessor to do this, just add the following to the filter element in your web.xml.

<filter>
    <init-param>
        <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
        <param-value>/WEB-INF/views/jsp</param-value>
    </init-param>
</filter>
+2
source

Source: https://habr.com/ru/post/1746381/


All Articles